2010-09-29 40 views
1

我正在使用下面的代碼來對unicode特徵進行特徵碼編碼。這是給我MD5EncryptedString的不同字符串值當我使用DataToEncrypt的價值爲「ABC」 &「ABC」是否有任何不區分大小寫的Unicode字符編碼類?

String DataToEncrypt="abc"; 
String MD5EncryptedString = String.Empty; 
MD5 md5 = new MD5CryptoServiceProvider(); 
Byte[] encodedBytes = ASCIIEncoding.Default.GetBytes(DataToEncrypt); 
// Byte[] encodedBytes = UTF8Encoding.Default.GetBytes(DataToEncrypt); 
    encodedBytes = md5.ComputeHash(encodedBytes); 
    MD5EncryptedString = BitConverter.ToString(encodedBytes); 
return MD5EncryptedString; 

是否有任何類,而不是ASCIIEncoding,這將給我不區分大小寫字符串手段它會給我MD5EncryptedString的數值是否與DataToEncrypt變量的'abc'&'ABC'相同?

+0

此外,MD5是_不加密! – 2010-09-29 17:23:51

+0

這是一個很好的閱讀來思考不區分大小寫:http://zwitserloot.com/2010/08/04/case-insensitive-comparison-a-lot-more-complicated-than-you-might-think/ – 2010-09-29 17:25:47

回答

1

您當前的代碼不使用要麼ASCIIEncodingUTF8Encoding ...它使用的系統默認的編碼,因爲它是隻相當於Encoding.Default。通過這兩個子類訪問該靜態屬性沒有區別。

要使用ASCII或UTF-8,請使用或Encoding.UTF8

現在,關於區分大小寫......不,這不是編碼工作。你的問題很混亂,因爲它聲稱它給你同樣的結果「abc」和「ABC」,這是我嚴重懷疑。我假設你的意思是你要想要它給你同樣的結果,但目前沒有。

我建議你使用這樣的事情,如果你想不區分大小寫:

string lower = string.ToLowerInvariant(); 
byte[] data = Encoding.UTF8.GetBytes(lower); 
byte[] hash = md5.ComputeHash(encodedBytes); 
return BitConverter.ToString(hash); 

注意,這給不區分大小寫的文化不敏感的方式......這可能不是在所有情況下的理想,但無論您使用哪種文化,至少是一致的。

0

所有字符編碼都使用不同的字節編碼大寫和小寫字母,所以沒有辦法獲得可以爲您做的編碼。

您可以在散列之前總是大寫/小寫字符串

0

將字符符號翻譯爲序號(字節)將在編碼大寫字母與小寫字母時始終給出不同的答案,因爲這兩個符號在代碼頁中由兩個不同的字節碼錶示。對於任何字符編碼來說都是如此,無論是ASCII,Unicode等。

爲了得到不區分大小寫的散列,總是在將字符串編碼爲字節並對其進行散列之前調用ToUpper()。

相關問題