MD5哈希结果不同
我试图将一些链编码为 MD5,但我注意到:
对于链:“123456çñ”
一些网站,例如
www.md5.cz
md5generator.net
返回:“66f561bb6b68372213dd9768e55e1002”
并且其他人喜欢:
http://www.adamek.biz/md5-generator.php
7thspace .com/webmaster_tools/online_md5_encoder.html
md5.rednoize.com/
返回: “9e6c9a1eeb5e00fbf4a2cd6519e0cfcb”
我需要使用标准 md5 对链进行编码,因为我需要将结果与其他系统连接。哪个哈希值是正确的?
提前致谢
Im trying to encode some chains to MD5 but I have noticed that:
For the chain: "123456çñ"
Some webs like
www.md5.cz
md5generator.net
return: "66f561bb6b68372213dd9768e55e1002"
And others like:
http://www.adamek.biz/md5-generator.php
7thspace.com/webmaster_tools/online_md5_encoder.html
md5.rednoize.com/
return: "9e6c9a1eeb5e00fbf4a2cd6519e0cfcb"
I'd need to encode the chains with standar md5 because I need to connect my results with other systems. which hash is the correct?
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我猜问题出在不同的文本编码中。您显示的字符串无法以 ANSI 编码表示 - 它需要 UTF-16 或 UTF-8。选择后者之一会导致字符串的不同字节表示形式,并产生不同的哈希值。
请记住,MD5 对字节而不是字符进行哈希处理 - 在将字节输入 MD5 之前,由您决定如何将这些字符编码为字节。如果您想与其他系统进行互操作,您必须使用与这些系统相同的编码。
The problem I guess is in different text encodings. The string you show can't be represented in ANSI encoding - it requires UTF-16 or UTF-8. The choice of one of the latter leads to different byte representation of the string and that produces different hashes.
Remember, MD5 hashes bytes, not characters - it's up to you how to encode those characters as bytes before feeding bytes to MD5. If you want to interoperate with other systems you have to use the same encoding as those systems.
让我们用Python来理解这一点。
在上面的输出中,我们看到 'ç' 和 'ñ' 的 UTF-8 编码。
因此,当我们计算 UTF-8 编码数据的 MD5 哈希值时,我们得到第一个结果。
在这里,我们看到 'ç' 和 'ñ' 的 Unicode 代码点。
因此,当我们计算字符串中每个字符的 Unicode 代码点(可能是 ISO-8859-1 编码)表示的数据的 MD5 哈希值时,我们得到第二个结果。
因此,第一个网站正在计算 UTF-8 编码数据的哈希值,而第二个网站则没有。
Let us use Python to understand this.
In the above output, we see the UTF-8 encoding of 'ç' and 'ñ'.
So, when we compute MD5 hash of the UTF-8 encoded data, we get the first result.
Here, we see the Unicode code points of 'ç' and 'ñ'.
So, when we compute MD5 hash of the data represented with the Unicode code points of each character in the string (possibly ISO-8859-1 encoded), we get the second result.
So, the first website is computing the hash of the UTF-8 encoded data while the second one is not.
如果我尝试:
它给出的结果是:
第一个网站使用 ISO-8859-1 编码字符串,第二个网站使用 UTF-8 编码字符串。
If I try :
It gives the result :
The first website encode the string in ISO-8859-1 and the second in UTF-8.
我猜想其中一些网站没有正确处理非 ASCII 字符。如果您使用的是标准 md5 库,那么只要您和您连接的系统就您使用的字符编码达成一致,就应该没问题。
顺便说一句,MD5不建议再使用了。如果这是出于加密目的,那么您确实应该转向 SHA2。
I would guess that some of these sites are not correctly handling non-ascii characters. If you are using a standard md5 library then you should be OK, as long as you and the system you are connecting to agree on what character encoding you use.
By the way, MD5 is not recommended for use any more. If this is for crypto purposes then you should really be moving to SHA2.