![](/img/trans.png)
[英]Why does php md5() always different from python's hash.md5() if using chinese character?
[英]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.