首页 文章

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

提问于
浏览
2

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

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

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

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

MD5(“快棕狐跳过懒狗”)= 9e107d9d372bb6826bd81d3542a419d6 MD5(“快棕狐跳过懒狗 . ”)= e4d909c290d0fb1ca068ffaddf22cbd0

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

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

3 回答

  • 0

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

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

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

    该算法将输入分为16个4字节块("sixteen 32-bit little-endian words"),并对输入的部分和寄存器 abcd 的当前状态应用特定的逻辑运算(函数 FG ,_ HI ) . 它为每组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));
    

    等等

  • 2

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

    例如:

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

    相同文字的md5签名带有一个附加句点,'这是一个看起来非常正常的短文本 . '是'870df12558aae47b40bf738290ba8554'

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

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

  • 1

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

相关问题