2011-08-03 81 views
4

我正在尋找一種方法將MD5和SHA1哈希從二進制轉換爲十六進制表示,反之亦然。我想用Perl來做,但是常見的解釋也是受歡迎的。將MD5/SHA1哈希從二進制轉換爲十六進制摘要

use Digest::MD5 qw(md5 md5_hex md5_base64); 
$data = "Plaintext"; 
$digest_bin = md5($data); 
$digest_hex = md5_hex($data); 

我如何比較$digest_bin$digest_hex,並確保它們是相同的$data的哈希?

回答

5

如果你看看摘要:: MD5 :: Perl中,這是摘要:: MD5的純Perl版本的源代碼,你會看到:

sub _encode_hex { unpack 'H*', $_[0] }  
sub md5_hex { _encode_hex &md5 } 

所以,你可以做:

if ($digest_hex eq unpack 'H*', $digest_bin) { 
    # same data 
} 
+0

感謝大家。 +1引用Digest :: MD5 :: Perl的來源。 – sw0x2A

10
unpack("H*", md5($x)) eq md5_hex($x); 
pack("H*", md5_hex($x)) eq md5($x); 

perldoc -f pack

的「H *」參數用於字節的字符串翻譯成他們的十六進制形式,反之亦然。

0
say "digest_hex: $digest_hex; 
say "digest_bin (as hex): ", unpack("H*", $digest_bin); 
相關問題