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

发布于 2024-09-08 12:07:52 字数 281 浏览 2 评论 0原文

我很困惑为什么我在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

拥抱影子 2024-09-15 12:07:52

计算 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.

通知家属抬走 2024-09-15 12:07:52

正如大家所指出的,问题在于 echo 打印了额外的换行符。

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

printf %s abc | openssl md5

或简单地

printf abc | openssl md5

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

printf %s abc | openssl md5

or simply

printf abc | openssl md5
酷到爆炸 2024-09-15 12:07:52

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.

贪了杯 2024-09-15 12:07:52

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

echo -n "abc" | openssl md5
900150983cd24fb0d6963f7d28e17f72

As jdehaan notes, if you tell echo not output a newline, you get the answer you expect

echo -n "abc" | openssl md5
900150983cd24fb0d6963f7d28e17f72
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文