如何将短语和单词转换为MD5哈希?

时间:2010-04-04 12:27:49

标签: hash passwords md5 endianness

请允许任何人向我解释如何将“我想买些牛奶”之类的短语转换为MD5吗?我阅读了关于MD5的维基百科文章,但是给出的解释超出了我的理解范围:

  

“MD5处理可变长度   消息进入固定长度的输出   128位。输入消息已中断   分成512位块   (十六个32位小端   整数)“

“十六个32位小端整数”对我来说已经很难了。我检查了关于小端的维基文章并且不明白了。

然而,Wiki文章中的一些短语及其MD5哈希的例子非常好:

  MD5(“快速的棕色狐狸跳了起来   懒狗“)=   9e107d9d372bb6826bd81d3542a419d6

     MD5(“快速的棕色狐狸跳了起来   懒狗。“)=   e4d909c290d0fb1ca068ffaddf22cbd0

有人可以使用一些非常简单的例子向我解释这个MD5算法是如何工作的吗?

而且,也许您知道一些软件或代码可以将短语转换为MD5。如果是,请告诉我。

3 个答案:

答案 0 :(得分:2)

忘掉endians:它只是一种编码信息的方式名称。

让我们按照维基百科MD5文章进行操作。您从输入消息开始。它可以是任意长的:常规创建2GB ISO文件的MD5哈希值,就像字符串的哈希长度十几个字符(例如密码)。

哈希将包含在寄存器abcd中。这些寄存器使用特殊值(h0-h3)初始化。

该算法将输入分为16个4字节块(“16个32位小端字”)并应用特定的逻辑运算(函数FGHI)部分输入和寄存器abcd的当前状态。它为每组16个4字节块执行64次。

处理完所有块后,abcd中剩余的内容是最后一个哈希值,您可以通过调用{ {1}}。

更新

如果你只是想能够计算一个哈希值,那么自己实现它是没有意义的,因为它已经完成并测试了可能的每一个重要语言:

Python

md5sum testfile.txt

SQL(MySQL):

import md5
md5.new("Nobody inspects the spammish repetition").digest()

Java

SELECT MD5('Nobody inspects the spammish repetition')

答案 1 :(得分:1)

Md5是一种哈希算法:它产生输入文本的签名,这样改变输入中的任何字母都会对签名产生重大的,不可预测的影响。

例如:

文本的md5签名'这是一个非常简短的文字看起来很正常'是'2bb1a5a5204aba95c886b3eb598c9d41'

相同文字的md5签名,附加一段时间,'这是一个很短的文字,看起来很正常。'是'870df12558aae47b40bf738290ba8554'

如您所见,签名有很大不同。这个属性使得md5适合作为一种“指纹识别”:两本只有一个字母相同的书具有完全不同的md5。此外,对于任何一本不同的书籍,两个md5几乎都不相同:碰撞极为罕见。

md5有很多实现,包括几个在线版本(here is one)。如果您想要特定语言的语言,请指明哪一个。

答案 2 :(得分:0)

MD5可怕地被打破了多年。如果您可以提供帮助,请勿用于任何目的。在新的应用程序中,使用SHA-2散列函数,如SHA-256。