繁体   English   中英

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

[英]Why PHP's md5 is different from OpenSSL's md5?

我对为什么在PHP和OpenSSL中看到md5哈希的结果不同感到非常困惑。

这是我正在运行的代码:

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

结果为:900150983cd24fb0d6963f7d28e17f72

虽然这样:

echo abc | openssl md5

结果在:0bee89b07a248e27c83fc3d5951213c1

为什么?

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

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

是的,验证了它。 而已。

众所周知,问题在于echo回显了额外的换行符。

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

printf %s abc | openssl md5

或简单地

printf abc | openssl md5

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

尝试使用echo -n abc | openssl md5 echo -n abc | openssl md5

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

echo -n "abc" | openssl md5
900150983cd24fb0d6963f7d28e17f72

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM