首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MD5加密的灾难

MD5加密的灾难
EN

Stack Overflow用户
提问于 2013-07-23 03:15:30
回答 2查看 374关注 0票数 2

我已经用Python语言写了一个加密程序,我的一个选择是md5加密。当我通过我的md5加密运行一个已知的字符串时,我收到一个不同的哈希值,然后如果我通过md5加密网站或火狐的cryptofox运行完全相同的字符串。

例如:我的程序散列输出- fe9c25d61e56054ea87703e30c672d91 -明文:g4m3

例如:在线哈希/加密狐- 26e4477a0fa9cb24675379331dba9c84 -明文:g4m3

完全相同的单词,两个不同的哈希值。下面是我的代码片段:

代码语言:javascript
复制
word="g4m3"
string=md5.new(word).hexdigest()
print string
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-23 03:18:45

您在MD5输入字符串中包含了一个换行符:

代码语言:javascript
复制
>>> import md5
>>> word="g4m3"
>>> md5.new(word).hexdigest()        # no newline
'26e4477a0fa9cb24675379331dba9c84'
>>> md5.new(word + '\n').hexdigest() # with a newline
'fe9c25d61e56054ea87703e30c672d91'

从文件读取数据时,请确保删除行尾的换行符。

代码语言:javascript
复制
>>> word = 'g4m3\n'
>>> md5.new(word).hexdigest()
'fe9c25d61e56054ea87703e30c672d91'
>>> word = word.strip()
>>> md5.new(word).hexdigest()
'26e4477a0fa9cb24675379331dba9c84'
票数 3
EN

Stack Overflow用户

发布于 2013-07-23 03:16:56

关于你的问题:哈希是非常敏感的。即使是单个字符的差异也可能导致完全不同的输出字符串。可能的情况是,在线实现附加了一个空格字符,或者更有可能是一个换行符。这个额外的字符将改变算法的输出。(也有可能发生了相反的情况:您添加了一个换行符,而在线行没有)

至于加密“MD5”:MD5是而不是加密。它是散列。加密接收数据和密钥,并输出随机数据。此数据是可恢复的。另一方面,散列接收数据并输出表示原始数据的有限数量的数据。但是,除非存储在其他地方,否则原始数据会丢失。

更多信息以供参考:另一个有趣的区别是各种类型的算法输出的数据。加密可以接受任何数量的数据(当然是在操作系统/软件的范围内),并将输出一堆数据appx。大小与输入数据相等。然而,散列不会。因为它仅仅是数据的表示,所以它的输出是有限的。这可能会带来问题。例如,如果您有无限数量的数据,最终,两个完全不同的数据片段将具有相同的散列。因此,当使用散列比较两个不同的值时,通常也比较两个单独的散列是一个好主意。两个独立的数据具有两个相等散列的统计概率非常低。

当然,然后您将进入在其核心利用加密方法的散列算法,但我不会在这里进行深入讨论。

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

https://stackoverflow.com/questions/17795593

复制
相关文章

相似问题

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