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

时间:2010-08-10 16:04:26

标签: md5

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

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

5 个答案:

答案 0 :(得分:25)

是的,正确实现md5会产生相同的结果,否则md5将无法用作校验和。编码和byte order可能会产生差异。您必须确保文本编码为完全相同的字节序列。

答案 1 :(得分:14)

它会,但有一个

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

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

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

答案 2 :(得分:5)

是。 MD5不是加密函数,它是使用特定算法的hash function

答案 3 :(得分:3)

是的,只要基础算法正确实现,md5哈希值将始终保持不变,无论其来源如何。

答案 4 :(得分:3)

安全散列函数(如MD5)的一个关键点是它们总是为同一输入生成相同的值。

但是,它确实要求您以相同的方式将输入数据编码为字节序列(或位)。例如,有很多方法可以对字符串进行编码。