我正在寻找一种方法将MD5和SHA1哈希从二进制转换为十六进制表示,反之亦然.我想在Perl中做到这一点,但也欢迎一个共同的解释.
use Digest::MD5 qw(md5 md5_hex md5_base64);
$data = "Plaintext";
$digest_bin = md5($data);
$digest_hex = md5_hex($data);
Run Code Online (Sandbox Code Playgroud)
我如何比较$digest_bin并$digest_hex确保它们是相同的哈希值$data?
Dal*_*aen 10
unpack("H*", md5($x)) eq md5_hex($x);
pack("H*", md5_hex($x)) eq md5($x);
Run Code Online (Sandbox Code Playgroud)
"H*"参数用于将字符串转换为十六进制表示,反之亦然.
如果你看一下Digest :: MD5 :: Perl的源代码,它是Digest :: MD5的纯perl版本,你会看到:
sub _encode_hex { unpack 'H*', $_[0] }
sub md5_hex { _encode_hex &md5 }
Run Code Online (Sandbox Code Playgroud)
所以你可以这样做:
if ($digest_hex eq unpack 'H*', $digest_bin) {
# same data
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2107 次 |
| 最近记录: |