为什么 PHP 的 md5 与 OpenSSL 的 md5 不同?
我很困惑为什么我在 PHP 和 OpenSSL 中看到不同的 md5 哈希结果。
这是我正在运行的代码:
php -r "echo md5('abc');"
结果:900150983cd24fb0d6963f7d28e17f72
而这:
echo abc | openssl md5
结果:0bee89b07a248e27c83fc3d5951213c1
为什么?
I am quite confused as to why I am seeing different results for md5 hashing in PHP and in OpenSSL.
Here is the code that I am running:
php -r "echo md5('abc');"
Results in: 900150983cd24fb0d6963f7d28e17f72
While this:
echo abc | openssl md5
Results in: 0bee89b07a248e27c83fc3d5951213c1
Why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
计算 MD5 的方法只有一种。
盲目猜测是第二个在被散列的字符串中还包含换行符。
嗯,验证了一下。就是这样。
There is only one way to compute MD5.
A blind guess is that the second one also includes a newline inside the string being hashed.
Yeh, verified it. That's it.
正如大家所指出的,问题在于 echo 打印了额外的换行符。
然而,提出的解决方案(
echo -n
)并不完全正确。根据 POSIX 标准,“实现不应支持任何选项。”如果你不使用它,你会让世界变得更好一点。使用
或简单地
As everyone noted, the problem is that echo prints an extra newline.
However, the solution proposed (
echo -n
) is not completely correct. According to the POSIX standard, "Implementations shall not support any options." You'll make the world a bit better if you don't use it.Use
or simply
echo
通常会在其输出的字符串末尾添加一个换行符;这就是 MD5 值不同的原因。尝试使用 echo -n abc | openssl md5。
echo
normally adds a new line character at the end of the string it outputs; that is the reason the MD5 values are different.Try with
echo -n abc | openssl md5
.正如 jdehaan 所说,如果你告诉 echo 不输出换行符,你就会得到你期望的答案
As jdehaan notes, if you tell echo not output a newline, you get the answer you expect