我使用以下代码进行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'?
答案 0 :(得分:1)
您当前的代码未使用 <{em> ASCIIEncoding
或 UTF8Encoding
...它正在使用系统上的默认编码,因为它是仅相当于Encoding.Default
。通过两个子类访问该静态属性没有任何区别。
要使用ASCII或UTF-8,请使用Encoding.ASCII
或Encoding.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(),然后再将其编码为字节并对其进行哈希处理。