我基本上是在php中创建一个API,它接受的参数之一是md5加密值。我对不同的编程语言以及MD5知之甚少。所以我的基本问题是,如果我接受md5加密值,那么值将保持不变,从.NET,Java,Perl,Ruby等编程语言生成。
或者会有一些限制或验证。
答案 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)的一个关键点是它们总是为同一输入生成相同的值。
但是,它确实要求您以相同的方式将输入数据编码为字节序列(或位)。例如,有很多方法可以对字符串进行编码。