如果我想寫一個凱撒密碼C#我必須通過每個案例?對於我來說,轉換爲ASCII或UTF是沒有意義的(可能是因爲我不明白它是如何工作的)。我只需要一個正確的方向。凱撒密碼C#
我應該爲每個字母分配數字1-26嗎?
如果我想寫一個凱撒密碼C#我必須通過每個案例?對於我來說,轉換爲ASCII或UTF是沒有意義的(可能是因爲我不明白它是如何工作的)。我只需要一個正確的方向。凱撒密碼C#
我應該爲每個字母分配數字1-26嗎?
你可以把每個字母到一個數組,並使用數組索引(纏繞在後)或到達最後一個時,你可以簡單地使用字母的asccii價值,換到第一位。這裏的技巧是,所有的人物都coninuously排序,起始於A = 0×41
對於一個傳統的凱撒塞浦路斯,你會檢查一個字符在[a-z]或[A-Z]範圍內,並且只是通過它否則。
另一種方法是以相同的方式處理所有字符,所以不僅a變爲b,而且μ變成¶並且在U + 10FFFF(Unicode中最高的編碼點)處環繞變爲U + 0000(前者是一個非字符,後者是一個空字符,但沒有理由爲什麼一個string
不能讓他們傳輸到另一個地方。
在這兩者之間,是作用於UTF-16。 ,你只需在每個char
的值上加1,然後將U + FFFF換成U + 0000即可。輸出可能成爲一個無效的UTF-16字符串(因爲它可能不匹配surrogates,但這不會阻止你從string
中傳遞出去,然後再次解密。畢竟,現代加密不會導致有效的字符串。
這是我不明白,如果我想解碼一個簡單的句子,我將其轉換爲代碼,我可以限制的範圍內,這樣,當我想「Z」,以比如'b',我是否總是必須來回走動,我能不能把它變成類似於一個車輪?並感謝您的答案。 –
這是規範,而不是工作的事(可悲的是,大多數現實生活中的併發症都是這樣過,編程比上班什麼客戶真正想要更容易)。我會說第一個*可能*是什麼意圖。 你是什麼意思「沒有類似於車輪」的意思,撒暗號的任何變種類似於車輪。 –
我的意思是包裝 - 正如我從另一個答案=)中發現的那樣 - 我應該寫下_不能讓它變成類似的。我仍然習慣這些條款。 –
或許給出提示將是有益的 - 你說你不想複製或被告知的答案:
char[] chars = new char[]{'a', 'b',...};
也是一個很好的幫助,謝謝! –
這是我的做法。
public static string Encrypt(string str, int n)
{
return string.Join("", str.Select(x => Encrypt(x, n)));
}
public static string Decrypt(string str, int n)
{
return string.Join("", str.Select(x => Decrypt(x, n)));
}
public static char Encrypt(char chr, int n)
{
int x = chr - 65;
return (char)((65) + ((x + n) % 26));
}
public static char Decrypt(char chr, int n)
{
int x = chr - 65;
return (char)((65) + ((x - n) % 26));
}
P.S.
只適用於大寫字母。
閱讀維基百科的文章:Caesar cipher
謝謝!這對我有意義,我沒有意識到我可以做到這一點(我是一個完整的初學者!)。 –