MD5加密哈希函数输出在所有编程语言中是否相同?

jta*_*may 17 md5

我基本上是在php中创建一个API,它接受的参数之一是md5加密值.我对不同的编程语言以及MD5知之甚少.所以我的基本问题是,如果我接受md5加密值,那么值将保持不变,从.NET,Java,Perl,Ruby ......等任何编程语言生成.

或者会有一些限制或验证.

And*_*rey 25

是的,md5的正确实现将产生相同的结果,否则md5将不会用作校验和.差异可能出现在编码和字节顺序上.您必须确保将文本编码为完全相同的字节序列.

  • 应该提到的是,让事物具有*完全*相同的字节是一个非常重要的问题.文本编码,字节顺序,列表继续. (7认同)
  • 行结尾 - 一旦md5sums在多个系统中不匹配,我就有了一个非常烦人的错误,结果发现有些系统正在从输入文本中删除尾随换行符,而其他系统则没有. (4认同)
  • @glowcoder你理解我有些不正确.马就在它的位置,不用担心.我说为了正确实现md5将为相同的输入字节产生相同的字节.不重要的是将相同的文本转换为相同的字节. (4认同)

Jon*_*nna 14

它会,但有一个但是.

这将是因为它规定在给定重复的字节序列的情况下可靠地产生相同的结果 - 关键是我们可以比较结果以检查字节没有改变,或者可能只是数字签署MD5结果而不是签名整个来源.

但是是错误的常见原因是使有关字符串是如何编码的假设.MD5适用于字节,而不是字符,所以如果我们对字符串进行哈希处理,我们实际上是对该字符串的特定编码进行哈希处理.某些语言(更有甚者,某些运行时)支持特定编码,并且一些程序员习惯于对该编码做出假设.更糟糕的是,某些规范可以对编码做出假设.这可能是导致错误的原因,其中两个不同的实现将为相同的字符串产生不同的MD5哈希.在字符超出范围U + 0020到U + 007F的情况下尤其如此(并且由于U + 007F是控件,因此具有其自身的问题).

所有这些都适用于其他加密哈希,例如SHA-哈希族.


Dan*_*uis 5

是.MD5不是加密函数,它是使用特定算法的哈希函数.