2010-02-16 73 views
4

从ksh终端运行md5函数不匹配简单Perl脚本的输出。为什么md5不匹配Perl的Digest :: MD5输出?

在终端我运行:

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 
+1

'echo'输出'c'和管道之间的空间吗? – 2010-02-16 01:42:37

+0

md5不是ksh函数。顺便说一句,这也会得到符合你Perl版本的结果:'echo -e'abc \ c'| md5'。 @Anon:不,请尝试'echo abc | hd'(或'hexdump -C')。 – 2010-02-16 03:55:22

回答

5

使用更轻便printf

printf "abc" | md5 
+0

非常感谢。不知道为什么我以前没有在这里发布这个问题。 – Anthony 2010-02-16 02:13:20

+0

在看到这些回复并感谢@ ghostdog74和Dennis Wiliamson后,我结束了与 echo“abc/c”| md5 我认为我读了15页的man page,但从来没有注意到关于/ c的那一点。 – Anthony 2010-02-16 12:26:05

4

echo不承认-n选项,所以你哈希字符串 '-n ABC \ n'。

+0

我只用了 echo abc | md5 但仍然得到不正确的散列。 如何删除换行或您是否知道使用ksh快速创建md5哈希的另一种方式? 0bee89b07a248e27c83fc3d5951213c1 – Anthony 2010-02-16 02:10:11

+1

@Anthony:try'/ bin/echo -n abc | md5'或者/ usr/bin/echo – ysth 2010-02-16 04:44:53

1

GregS的答案,一些例子:

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

而且

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

当我碰到这些问题,我常做这样的事情来检查我的输出是什么(例如显示t abs,与空格等)

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