我已经用Python语言写了一个加密程序,我的一个选择是md5加密。当我通过我的md5加密运行一个已知的字符串时,我收到一个不同的哈希值,然后如果我通过md5加密网站或火狐的cryptofox运行完全相同的字符串。
例如:我的程序散列输出- fe9c25d61e56054ea87703e30c672d91 -明文:g4m3
例如:在线哈希/加密狐- 26e4477a0fa9cb24675379331dba9c84 -明文:g4m3
完全相同的单词,两个不同的哈希值。下面是我的代码片段:
word="g4m3"
string=md5.new(word).hexdigest()
print string发布于 2013-07-23 03:18:45
您在MD5输入字符串中包含了一个换行符:
>>> import md5
>>> word="g4m3"
>>> md5.new(word).hexdigest() # no newline
'26e4477a0fa9cb24675379331dba9c84'
>>> md5.new(word + '\n').hexdigest() # with a newline
'fe9c25d61e56054ea87703e30c672d91'从文件读取数据时,请确保删除行尾的换行符。
>>> word = 'g4m3\n'
>>> md5.new(word).hexdigest()
'fe9c25d61e56054ea87703e30c672d91'
>>> word = word.strip()
>>> md5.new(word).hexdigest()
'26e4477a0fa9cb24675379331dba9c84'发布于 2013-07-23 03:16:56
关于你的问题:哈希是非常敏感的。即使是单个字符的差异也可能导致完全不同的输出字符串。可能的情况是,在线实现附加了一个空格字符,或者更有可能是一个换行符。这个额外的字符将改变算法的输出。(也有可能发生了相反的情况:您添加了一个换行符,而在线行没有)
至于加密“MD5”:MD5是而不是加密。它是散列。加密接收数据和密钥,并输出随机数据。此数据是可恢复的。另一方面,散列接收数据并输出表示原始数据的有限数量的数据。但是,除非存储在其他地方,否则原始数据会丢失。
更多信息以供参考:另一个有趣的区别是各种类型的算法输出的数据。加密可以接受任何数量的数据(当然是在操作系统/软件的范围内),并将输出一堆数据appx。大小与输入数据相等。然而,散列不会。因为它仅仅是数据的表示,所以它的输出是有限的。这可能会带来问题。例如,如果您有无限数量的数据,最终,两个完全不同的数据片段将具有相同的散列。因此,当使用散列比较两个不同的值时,通常也比较两个单独的散列是一个好主意。两个独立的数据具有两个相等散列的统计概率非常低。
当然,然后您将进入在其核心利用加密方法的散列算法,但我不会在这里进行深入讨论。
https://stackoverflow.com/questions/17795593
复制相似问题