我基本上是在php中创建一个API,它接受的参数之一是md5加密值.我对不同的编程语言以及MD5知之甚少.所以我的基本问题是,如果我接受md5加密值,那么值将保持不变,从.NET,Java,Perl,Ruby ......等任何编程语言生成.
或者会有一些限制或验证.
And*_*rey 25
是的,md5的正确实现将产生相同的结果,否则md5将不会用作校验和.差异可能出现在编码和字节顺序上.您必须确保将文本编码为完全相同的字节序列.
Jon*_*nna 14
它会,但有一个但是.
这将是因为它规定在给定重复的字节序列的情况下可靠地产生相同的结果 - 关键是我们可以比较结果以检查字节没有改变,或者可能只是数字签署MD5结果而不是签名整个来源.
该但是是错误的常见原因是使有关字符串是如何编码的假设.MD5适用于字节,而不是字符,所以如果我们对字符串进行哈希处理,我们实际上是对该字符串的特定编码进行哈希处理.某些语言(更有甚者,某些运行时)支持特定编码,并且一些程序员习惯于对该编码做出假设.更糟糕的是,某些规范可以对编码做出假设.这可能是导致错误的原因,其中两个不同的实现将为相同的字符串产生不同的MD5哈希.在字符超出范围U + 0020到U + 007F的情况下尤其如此(并且由于U + 007F是控件,因此具有其自身的问题).
所有这些都适用于其他加密哈希,例如SHA-哈希族.