2010-02-16 74 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