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

Ale*_* N. 7 php openssl md5

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

这是我正在运行的代码:

php -r "echo md5('abc');"
Run Code Online (Sandbox Code Playgroud)

结果:900150983cd24fb0d6963f7d28e17f72

这个:

echo abc | openssl md5
Run Code Online (Sandbox Code Playgroud)

结果:0bee89b07a248e27c83fc3d5951213c1

为什么?

jde*_*aan 21

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

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

是的,验证了它.而已.

  • 这很奇怪,但`echo`返回换行符.使用`echo -n abc | openssl md5`获得与PHP版本相同的输出. (5认同)

Rom*_*aka 8

众所周知,问题是echo打印了一个额外的换行符.

但是,提出的解决方案(echo -n)并不完全正确.根据POSIX标准," 实现不支持任何选项. "如果你不使用它,你将使世界变得更好.使用

printf %s abc | openssl md5
Run Code Online (Sandbox Code Playgroud)

或者干脆

printf abc | openssl md5
Run Code Online (Sandbox Code Playgroud)


kia*_*uno 6

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

试试吧echo -n abc | openssl md5.