将MD5 / SHA1哈希从二进制转换为十六进制摘要

时间:2011-08-03 12:31:08

标签: perl md5 hash

我正在寻找一种方法将MD5和SHA1哈希从二进制转换为十六进制表示,反之亦然。我想在Perl中做到这一点,但也欢迎常见的解释。

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的哈希值?

3 个答案:

答案 0 :(得分:10)

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

perldoc -f pack

“H *”参数用于将字符串转换为十六进制表示,反之亦然。

答案 1 :(得分:5)

如果你查看Digest :: MD5 :: Perl的源代码,它是Digest :: MD5的纯perl版本,你会看到:

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

所以你可以这样做:

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

答案 2 :(得分:0)

say "digest_hex: $digest_hex;
say "digest_bin (as hex): ", unpack("H*", $digest_bin);