我正在寻找一种方法将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
的哈希值?
答案 0 :(得分:10)
unpack("H*", md5($x)) eq md5_hex($x);
pack("H*", md5_hex($x)) eq md5($x);
“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);