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

发布于 2024-09-25 14:19:08 字数 652 浏览 6 评论 0原文

我正在使用以下代码对 unicode 字符进行字符编码。当我使用 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 会给我不区分大小写的字符串,这意味着它将为我提供与 'abc' 和 'abc' 相同的 MD5EncryptedString 值。 DataToEncrypt 变量的“ABC”?

I am using the following code for charater encoding of unicode charater. It is giving me the different string value of MD5EncryptedString when I use the value of the DataToEncrypt as 'abc' & '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;

Is there any class instead of the ASCIIEncoding which will give me the case insensitive string means it will give me the value of the MD5EncryptedString same for both the 'abc' & 'ABC' for the DataToEncrypt variable ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

楠木可依 2024-10-02 14:19:08

您当前的代码未使用 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);

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

Your current code isn't using either ASCIIEncoding or UTF8Encoding... it's using the default encoding on the system, because it's equivalent to just Encoding.Default. Accessing that static property via the two subclasses makes no difference.

To use ASCII or UTF-8, use Encoding.ASCII or Encoding.UTF8.

Now, regarding case-sensitivity... no, that's not the job of encodings. Your question is quite confusing as it claims it is giving you the same result for "abc" and "ABC", which I seriously doubt. I assume you mean you want it to give you the same result, but it currently doesn't.

I suggest you use something like this, if you want case insensitivity:

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

Note that this gives case-insensitivity in a culture-insensitive way... which may not be ideal in all cases, but is at least consistent regardless of which culture you're using.

听不够的曲调 2024-10-02 14:19:08

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

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

Translating character symbols to ordinals (bytes) will ALWAYS give you a different answer when you encode uppercase vs lowercase, because those two symbols are represented by two different bytecodes in the codepage. That's true for any character encoding, whether it's ASCII, Unicode, etc.

To get a case-insensitive hash, always call ToUpper() on the string before encoding it into bytes and hashing it.

夕嗳→ 2024-10-02 14:19:08

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

您始终可以在散列之前将字符串大写/小写。

All character encodings encode upper and lower case letters using different bytes, so there is no way to get an encoding that will do that for you.

You can always upper/lower case the string before hashing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文