2011-08-03 10 views
4

MD5とSHA1のハッシュをバイナリ形式から16進形式に変換する方法を探しています。私はPerlでやりたいのですが、一般的な説明も歓迎します。MD5/SHA1ハッシュをバイナリから16進のダイジェストに変換する

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

、あなたが表示されます:

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

だからあなたが行うことができます:

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

ありがとうございます。 Digest :: MD5 :: Perlのソースを引用するための+1。 – sw0x2A

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

perldoc -f pack

「H *」の引数は、その16進表現とその逆にバイトの文字列を変換するために使用されます。あなたがダイジェスト:: MD5の純粋なPerlのバージョンであるダイジェスト:: MD5 :: Perlの、のソースに見れば

0
say "digest_hex: $digest_hex; 
say "digest_bin (as hex): ", unpack("H*", $digest_bin); 
関連する問題