是否有任何不区分大小写的Unicode字符编码类?

时间:2010-09-29 16:53:52

标签: .net cryptography case-insensitive

我使用以下代码进行unicode charater的charater编码。当我使用DataToEncrypt的值作为'abc'&时,它给了我不同的MD5EncryptedString字符串值。 'ABC'

 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的值,对于'abc'和& DataToEncrypt变量的'ABC'?

3 个答案:

答案 0 :(得分:1)

您当前的代码未使用 <{em> ASCIIEncoding UTF8Encoding ...它正在使用系统上的默认编码,因为它是仅相当于Encoding.Default。通过两个子类访问该静态属性没有任何区别。

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

现在,关于区分大小写......不,这不是编码的工作。你的问题很混乱,因为它声称它 给你的“abc”和“ABC”给出了相同的结果,我很怀疑。我认为你的意思是想要它给你相同的结果,但它目前没有。

如果你想要不区分大小写,我建议你使用这样的东西:

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

请注意,这会以不区分大小写的方式提供不区分大小写...这在所有情况下可能并不理想,但无论您使用的是哪种文化,它都至少是一致的。

答案 1 :(得分:0)

所有字符编码都使用不同的字节编码大写和小写字母,因此无法获得能够为您完成此操作的编码。

散列之前,您总是可以大写/小写字符串

答案 2 :(得分:0)

将字符符号转换为序数(字节)在编码大写和小写时总是会给出不同的答案,因为这两个符号在代码页中由两个不同的字节码表示。对于任何字符编码都是如此,无论是ASCII,Unicode等等。

要获取不区分大小写的哈希,请始终在字符串上调用ToUpper(),然后再将其编码为字节并对其进行哈希处理。