首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有不同结果的MD5散列

具有不同结果的MD5散列
EN

Stack Overflow用户
提问于 2011-07-27 13:57:00
回答 4查看 21.7K关注 0票数 20

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

连锁店:"123456çñ“

有些网站就像

http://www.md5.net

www.md5.cz

md5generator.net

return:"66f561bb6b68372213dd9768e55e1002“

还有其他的,比如:

http://www.adamek.biz/md5-generator.php

7thspace.com/webmaster_tools/online_md5_encoder.html

md5.rednoize.com/

return:"9e6c9a1eeb5e00fbf4a2cd6519e0cfcb“

我需要用标准md5对链进行编码,因为我需要将我的结果与其他系统连接起来。哪个散列是正确的?

提前感谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-27 14:01:23

我猜问题出在不同的文本编码中。您显示的字符串不能用ANSI编码表示-它需要UTF-16或UTF-8。选择后者之一会导致字符串的字节表示不同,从而产生不同的散列。

请记住,MD5散列字节,而不是字符-在将字节提供给MD5之前,如何将这些字符编码为字节取决于您。如果您希望与其他系统进行互操作,则必须使用与这些系统相同的编码。

票数 23
EN

Stack Overflow用户

发布于 2011-07-27 14:03:30

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

代码语言:javascript
运行
复制
>>> '123456çñ'
'123456\xc3\xa7\xc3\xb1'
>>> 'ç'
'\xc3\xa7'
>>> 'ñ'
'\xc3\xb1'

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

代码语言:javascript
运行
复制
>>> md5('123456çñ').digest().encode('hex')
'66f561bb6b68372213dd9768e55e1002'

因此,当我们计算UTF8编码数据的MD5散列时,我们得到了第一个结果。

代码语言:javascript
运行
复制
>>> u'ç'
u'\xe7'
>>> u'ñ'
u'\xf1'

在这里,我们看到了Unicode代码点“ç”和“ñ”。

代码语言:javascript
运行
复制
>>> md5('123456\xe7\xf1').digest().encode('hex')
'9e6c9a1eeb5e00fbf4a2cd6519e0cfcb'

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

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

票数 8
EN

Stack Overflow用户

发布于 2011-07-27 14:08:33

如果我尝试:

代码语言:javascript
运行
复制
echo "123456çñ<br />";
echo "utf-8 : ".md5("123456çñ")."<br />";
echo "ISO-8859-1 : ".md5(iconv("UTF-8", "ISO-8859-1","123456çñ"))."<br />";

它给出了结果:

代码语言:javascript
运行
复制
123456çñ
utf-8 : 66f561bb6b68372213dd9768e55e1002
ISO-8859-1 : 9e6c9a1eeb5e00fbf4a2cd6519e0cfcb

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6839969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档