任何人都可以向我解释如何将“我想买些牛奶”之类的短语转换成MD5吗?我读过关于MD5的维基百科文章,但是给出的解释超出了我的理解范围:
“MD5将可变长度消息处理为128位的固定长度输出 . 输入消息被分解为512位块(16个32位小端整数)的块”
“十六个32位小端整数”对我来说已经很难了 . 我检查了关于小端的维基文章并且不了解 .
但是,Wiki文章中的一些短语及其MD5哈希的例子非常好:
MD5(“快棕狐跳过懒狗”)= 9e107d9d372bb6826bd81d3542a419d6 MD5(“快棕狐跳过懒狗 . ”)= e4d909c290d0fb1ca068ffaddf22cbd0
任何人都可以使用一些非常简单的例子向我解释这个MD5算法是如何工作的吗?
而且,也许您知道一些软件或代码可以将短语转换为MD5 . 如果是,请告诉我 .
3 回答
忘掉endians:它只是一种编码信息的方式名称 .
让我们按照维基百科MD5文章 . 您从输入消息开始 . 它可以任意长:常规创建2GB ISO文件的MD5哈希值,就像字符串的哈希长度十几个字符(例如密码) .
哈希将包含在寄存器
a
,b
,c
和d
中 . 这些寄存器使用特殊值(h0-h3
)进行初始化 .该算法将输入分为16个4字节块("sixteen 32-bit little-endian words"),并对输入的部分和寄存器
a
,b
,c
和d
的当前状态应用特定的逻辑运算(函数F
,G
,_H
和I
) . 它为每组16个4字节块执行64次 .处理完所有块后,
a
,b
,c
和d
中剩余的是最后一个哈希值,即通过调用md5sum testfile.txt
得到的哈希值 .更新:
如果你只是想能够计算一个哈希值,那么自己实现它就没有任何意义,因为它已经完成并测试了可能的每一个重要语言:
Python:
SQL(MySQL):
Java:
等等
Md5是一种哈希算法:它产生输入文本的签名,这样改变输入中的任何字母都会对签名产生显着的,不可预测的影响 .
例如:
文本的'md5签名'这是一个看起来很正常的非常短的文本'是'2bb1a5a5204aba95c886b3eb598c9d41'
相同文字的md5签名带有一个附加句点,'这是一个看起来非常正常的短文本 . '是'870df12558aae47b40bf738290ba8554'
如您所见,签名有很大不同 . 这个属性使得md5适合作为一种“指纹识别”:两本只有一个字母相同的书具有完全不同的md5 . 此外,对于任何一本不同的书籍,两个md5几乎都不相同:碰撞极为罕见 .
md5有很多实现,包括几个在线版本(here is one) . 如果您想要特定语言的语言,请指定哪一个 .
MD5可怕地破碎并且已经存在多年了 . 如果您可以提供帮助,请勿用于任何目的 . 在新应用程序中,使用SHA-2散列函数,如SHA-256 .