MD5哈希结果不同

发布于 2024-11-26 13:01:53 字数 578 浏览 1 评论 0原文

我试图将一些链编码为 MD5,但我注意到:

对于链:“123456çñ”

一些网站,例如

http://www .md5.net

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

http://www.md5.net

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 技术交流群。

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

发布评论

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

评论(4

暗藏城府 2024-12-03 13:01:53

我猜问题出在不同的文本编码中。您显示的字符串无法以 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.

萌︼了一个春 2024-12-03 13:01:53

让我们用Python来理解这一点。

>>> '123456çñ'
'123456\xc3\xa7\xc3\xb1'
>>> 'ç'
'\xc3\xa7'
>>> 'ñ'
'\xc3\xb1'

在上面的输出中,我们看到 'ç' 和 'ñ' 的 UTF-8 编码。

>>> md5('123456çñ').digest().encode('hex')
'66f561bb6b68372213dd9768e55e1002'

因此,当我们计算 UTF-8 编码数据的 MD5 哈希值时,我们得到第一个结果。

>>> u'ç'
u'\xe7'
>>> u'ñ'
u'\xf1'

在这里,我们看到 'ç' 和 'ñ' 的 Unicode 代码点。

>>> md5('123456\xe7\xf1').digest().encode('hex')
'9e6c9a1eeb5e00fbf4a2cd6519e0cfcb'

因此,当我们计算字符串中每个字符的 Unicode 代码点(可能是 ISO-8859-1 编码)表示的数据的 MD5 哈希值时,我们得到第二个结果。

因此,第一个网站正在计算 UTF-8 编码数据的哈希值,而第二个网站则没有。

Let us use Python to understand this.

>>> '123456çñ'
'123456\xc3\xa7\xc3\xb1'
>>> 'ç'
'\xc3\xa7'
>>> 'ñ'
'\xc3\xb1'

In the above output, we see the UTF-8 encoding of 'ç' and 'ñ'.

>>> md5('123456çñ').digest().encode('hex')
'66f561bb6b68372213dd9768e55e1002'

So, when we compute MD5 hash of the UTF-8 encoded data, we get the first result.

>>> u'ç'
u'\xe7'
>>> u'ñ'
u'\xf1'

Here, we see the Unicode code points of 'ç' and 'ñ'.

>>> md5('123456\xe7\xf1').digest().encode('hex')
'9e6c9a1eeb5e00fbf4a2cd6519e0cfcb'

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.

月依秋水 2024-12-03 13:01:53

如果我尝试:

echo "123456çñ<br />";
echo "utf-8 : ".md5("123456çñ")."<br />";
echo "ISO-8859-1 : ".md5(iconv("UTF-8", "ISO-8859-1","123456çñ"))."<br />";

它给出的结果是:

123456çñ
utf-8 : 66f561bb6b68372213dd9768e55e1002
ISO-8859-1 : 9e6c9a1eeb5e00fbf4a2cd6519e0cfcb

第一个网站使用 ISO-8859-1 编码字符串,第二个网站使用 UTF-8 编码字符串。

If I try :

echo "123456çñ<br />";
echo "utf-8 : ".md5("123456çñ")."<br />";
echo "ISO-8859-1 : ".md5(iconv("UTF-8", "ISO-8859-1","123456çñ"))."<br />";

It gives the result :

123456çñ
utf-8 : 66f561bb6b68372213dd9768e55e1002
ISO-8859-1 : 9e6c9a1eeb5e00fbf4a2cd6519e0cfcb

The first website encode the string in ISO-8859-1 and the second in UTF-8.

层林尽染 2024-12-03 13:01:53

我猜想其中一些网站没有正确处理非 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.

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