为什么md5不匹配Perl的Digest :: MD5输出?

时间:2010-02-16 01:40:06

标签: perl md5 ksh

从ksh终端运行md5函数与简单的Perl脚本的输出不匹配。

在终端我跑:

echo -n abc | md5
62fecf21103616856d72e6ffc9bcb06b

如果我使用Perl运行它:

use Digest::MD5 qw(md5_hex);

foreach (@ARGV) {
   print "Digest is ", md5_hex($_), "\n";
}
exit

我得到了

./perl_test.sh abc
Digest is 900150983cd24fb0d6963f7d28e17f72

在我看到的所有样本和md5函数本身的样本中,Perl看起来正确,但仅使用Ksh的那个不是:

md5 -x
MD5 test suite:
MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72

4 个答案:

答案 0 :(得分:5)

使用更具便携性的printf

printf "abc" | md5

答案 1 :(得分:4)

您的echo无法识别-n选项,因此您要对字符串'-n abc \ n'进行哈希处理。

答案 2 :(得分:1)

除了GregS的回答之外,还有一些例子:

$ md5 -s "-n abc"$'\012' # \012 = newline
MD5 ("-n abc
") = 62fecf21103616856d72e6ffc9bcb06b

$ md5 -s "abc"
MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72

答案 3 :(得分:0)

当我遇到这些问题时,我通常会做这样的事情来检查我的输出是什么(例如显示标签,空格等等)

$ echo abc | hexdump -c
0000000   a   b   c  \n                                                
0000004