MD5 在 PHP 和 ash/OSX 之间给出不同的结果


MD5 gives different result between PHP and ash/OSX

我正在Busybox上创建一个哈希,我在php脚本中与之进行比较。

然而,结果绝不是期望的:

BusyBox v1.15.3 echo A|md5sum     bf072e9119077b4e76437a93986787ef  -
MacBook-Air:~ $ echo A|md5        bf072e9119077b4e76437a93986787ef
MacBook-Air:~ $ echo "A"|md5      bf072e9119077b4e76437a93986787ef
[root@centos67 ~] echo "A"|md5sum bf072e9119077b4e76437a93986787ef
.
PHP LAMP: echo md5("A");          7fc56270e7a70fa81a5935b72eacbe29
PHP MAMP: echo md5("A");          7fc56270e7a70fa81a5935b72eacbe29

此外,谷歌搜索的在线 md5 生成脚本总是返回与上述 PHP 脚本相同的结果。

为什么会这样? md5 和 md5sum 之间的区别是什么(如果有的话),如果有区别,为什么 busybox 和 OSX 之间的命名不一致?

如何让 PHP 生成与我的 Busybox 生成的相同哈希? 反过来(使Busybox gerenate成为PHP md5)也可以,但它必须与我的基本Busybox版本一起使用。

发现答案很简单。

GNU echo总是以换行符结尾。

两种可能的修复:

BusyBox v1.15.3 echo -n A|md5sum     7fc56270e7a70fa81a5935b72eacbe29  -
MacBook-Air:~ $ echo -n A|md5        7fc56270e7a70fa81a5935b72eacbe29
MacBook-Air:~ $ echo -n "A"|md5      7fc56270e7a70fa81a5935b72eacbe29
[root@centos67 ~] echo -n "A"|md5sum 7fc56270e7a70fa81a5935b72eacbe29
.
PHP LAMP: echo md5("A");             7fc56270e7a70fa81a5935b72eacbe29
PHP MAMP: echo md5("A");             7fc56270e7a70fa81a5935b72eacbe29

BusyBox v1.15.3 echo A|md5sum        bf072e9119077b4e76437a93986787ef  -
MacBook-Air:~ $ echo A|md5           bf072e9119077b4e76437a93986787ef
MacBook-Air:~ $ echo "A"|md5         bf072e9119077b4e76437a93986787ef
[root@centos67 ~] echo "A"|md5sum    bf072e9119077b4e76437a93986787ef
.
PHP LAMP: echo md5("A'n");           bf072e9119077b4e76437a93986787ef
PHP MAMP: echo md5("A'n");           bf072e9119077b4e76437a93986787ef