2010-04-04 103 views
2

任何人都可以向我解释一下,如何将“我想买一些牛奶”这样的短语转换成MD5?我读MD5维基百科文章,但给出的解释没有超出我的理解:如何将短语和单词转换为MD5哈希?

“MD5处理的可变长度 消息转换的 128位的固定长度的输出的输入消息被分解 向上成的512位块 (16个32位小端 整数)”

‘16个32位小端整数块’已经是对我来说很难。我查看了关于小端的Wiki文章,并且一点都不明白。

然而,在维基文章的一些短语和他们的MD5哈希值的例子非常漂亮:

MD5(“敏捷的棕色狐狸跳过 懒狗”)= 9e107d9d372bb6826bd81d3542a419d6

MD5( “敏捷的棕色狐狸在 跳懒狗。”)= e4d909c290d0fb1ca068ffaddf22cbd0

任何人都可以,请向我解释一下这个MD5算法如何使用一些非常简单的例子?

此外,也许你知道一些软件或代码将短语转换为他们的MD5。如果是,请告诉我。

+1

您是在寻找关于MD5内部工作原理的详细解释,或者您是否想知道如何计算某种语言的哈希值? – 2010-04-04 12:42:36

+0

嗨,马蒂!我只是想计算。恐怕我不了解MD5的所有工作方式 – brilliant 2010-04-04 12:55:29

+2

您使用哪种语言?大多数语言现在都内置了对哈希的支持。另外,别担心,我从来没有花时间去真正阅读哈希算法是如何工作的。我将这一切留给密码学人员。只要记住,MD5不再被认为是安全的,它可以使用诸如彩虹表(http://en.wikipedia.org/wiki/Rainbow_table) – 2010-04-04 13:07:40

回答

2

忘记endians:它只是一种方式来编码信息的方式。

让我们来关注维基百科MD5的文章。你从一个输入消息开始。它可以是任意长的:2GB ISO文件的MD5哈希按惯例创建,就像十几个字符长的字符串(如密码)的哈希。

散列将包含在寄存器a,b,cd中。这些寄存器用特殊值初始化(h0-h3)。

该算法打破了输入到16个4字节块(“16 32位小端字”),并且在输入和电流的部件施加特定的逻辑操作(功能FGHI)寄存器a,b,cd的状态。它为每组16个4字节块执行64次这样的操作。

当所有的块进行处理,剩下的abcd是最终散列,一个你可以通过调用md5sum testfile.txt得到。

更新:

如果你只是想能够计算哈希,实现它自己是没有意义的,因为它已经完成,测试大概每显著语言在那里:

Python

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

SQL(MySQL):

SELECT MD5('Nobody inspects the spammish repetition') 

Java

String s="Nobody inspects the spammish repetition"; 
MessageDigest m=MessageDigest.getInstance("MD5"); 
m.update(s.getBytes(),0,s.length()); 
System.out.println(new BigInteger(1,m.digest()).toString(16)); 

+0

谢谢你,托米斯拉夫,为这个答案。我正在研究你的答案。 – brilliant 2010-04-04 13:03:25

+0

哇! Tomislav,非常感谢你的更新! – brilliant 2010-04-04 13:52:26

1

Md5是一种散列算法:它产生输入文本的签名,使得改变输入中的任何字母将对签名具有显着的不可预知的影响。

例如:

文本“这是一个很短的文字看起来很正常”的MD5签名是“2bb1a5a5204aba95c886b3eb598c9d41”

与添加的时期同一文本的MD5签名,“这是一个很短的文字,看起来很正常。“是'870df12558aae47b40bf738290ba8554'

正如你所看到的那样,签名有显着的不同。这个属性使得md5适合作为一种'fingerprinting'类型:两本只有一个字母不同的书有完全不同的md5s。而且,对于任何一本不同的书籍,两个md5几乎都不相同:碰撞是非常罕见的。

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

+0

哇!不知道,非常感谢你为这个链接。对不起,我忘了指定语言 - 我对python感兴趣。 – brilliant 2010-04-04 13:00:51

0

MD5是可怕的破坏,已经多年了。如果你可以帮忙的话,不要用于任何目的。在新的应用程序中,使用SHA-2哈希函数,如SHA-256。

+0

谢谢你,保罗,告诉我这一点。 – brilliant 2010-04-07 12:12:54