为什么PHP的md5与OpenSSL的md5不同?

时间:2010-07-02 23:05:32

标签: php openssl md5

我很困惑为什么我在PHP和OpenSSL中看到md5散列的不同结果。

以下是我正在运行的代码:

php -r "echo md5('abc');"

结果于:900150983cd24fb0d6963f7d28e17f72

虽然这个:

echo abc | openssl md5

结果:0bee89b07a248e27c83fc3d5951213c1

为什么?

4 个答案:

答案 0 :(得分:21)

只有一种方法可以计算MD5。

盲目的猜测是第二个还包括被散列的字符串中的换行符。

是的,验证了它。就是这样。

答案 1 :(得分:8)

正如大家所说,问题是echo打印了一个额外的换行符。

但是,提出的解决方案(echo -n)并不完全正确。根据POSIX标准,“Implementations shall not support any options.”如果您不使用它,您将使世界变得更好。 使用

printf %s abc | openssl md5

或只是

printf abc | openssl md5

答案 2 :(得分:6)

echo通常会在输出的字符串末尾添加一个新行字符;这就是MD5值不同的原因。

尝试使用echo -n abc | openssl md5

答案 3 :(得分:1)

正如jdehaan所说,如果你告诉echo不输出换行符,你会得到你期望的答案

echo -n "abc" | openssl md5
900150983cd24fb0d6963f7d28e17f72