2011-02-24 69 views
2

如何使用C#代碼在ASP.NET中執行替換加密算法?替代算法

請不要爲我提供的示例代碼的語法....

+1

您是指替代密碼?你可以使用[ROT13](http://www.dotnetperls.com/rot13)。我不認爲「加密」一詞準確地適用於替代密碼。 – 2011-02-24 23:13:42

+0

我的問題的完美答案...感謝馬克... – lock 2011-02-24 23:22:25

+0

請注意,我沒有真正測試該鏈接上的代碼(這只是第一個谷歌命中「rot13 c#」)。但只要你只處理ASCII字符,它就會「看起來」合理。 – 2011-02-24 23:26:21

回答

0

其實ROT13是一個Caesar cipher變體,其想法是N個位置進一步字母表中的轉向純文本的信件。 ROT13或Caesar密碼都不安全。爲什麼?

基本上可以將加密強度定義爲打破給定加密文本所需的工作量。那麼我們應該怎麼做才能打破這些? :

  • ROT13 - >我們簡單地將每個字符向後移動13個字母位置。 (根本沒有安全性)。
  • 凱撒密碼 - >
    for N=1 to 26 do:
            shift each character by N positions back in the alphabet.
            If a lot of common English words (the, and, that,...) - encryption is cracked.在凱撒情況下
    所以還是26次迭代破解加密的文字是如此之小數目,我們可以有把握地宣稱凱撒密碼沒有安全也。 (但它當然比ROT13好一點)。

如果你想要一個更有用的替代密碼 - 然後使用Vigenere cipher。與ROT13/Caesar密碼相反 - Vigenere密碼在加密操作中不使用FIXED字母。 (它通過按需要的順序切換使用多個字母)。這就是爲什麼Vigenere比ROT13/Caesar更安全的原因。仍然Vigenere是弱加密和可比XOR encryption。爲什麼Vigenere軟弱?基本上,因爲它容易受到Frequency analysis(當然首先需要猜測/找到密鑰長度)。 這裏是vigenere C# code(與凱撒/ ROT13一起)。

祝你好運!

2
StringBuilder encryptedBuilder = new Stringbuilder(); 

for(int i = 0; i < key.Length; i++) { 
    char e = getCharFor(key[i]); // this does substitution - implement this 
    encryptedBuilder.Append(e); 
} 

string encryptedString = encryptedBuilder.ToString(); 
+0

上面的代碼顯示錯誤在「getCharFor」和「追加」希望問題在於我身邊我使用VS2k5 .NET 2.0反正謝謝... :) – lock 2011-02-24 23:24:26

+0

你必須自己定義'getCharFor'函數。這就是你替換的地方。並且'append'應該是'Append'的大寫A.我的不好(太多的Java!:p) – corsiKa 2011-02-24 23:27:57