【问题标题】:Convert MD5/SHA1 hash from binary to hex digest将 MD5/SHA1 哈希从二进制转换为十六进制摘要
【发布时间】:2011-08-03 12:31:08
【问题描述】:

我正在寻找一种将 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 的哈希?

【问题讨论】:

    标签: perl md5 hash


    【解决方案1】:
    unpack("H*", md5($x)) eq md5_hex($x); 
    pack("H*", md5_hex($x)) eq md5($x);
    

    perldoc -f pack

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

    【讨论】:

      【解决方案2】:

      如果您查看 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
      }
      

      【讨论】:

      • 感谢大家。 +1 引用 Digest::MD5::Perl 的来源。
      【解决方案3】:
      say "digest_hex: $digest_hex;
      say "digest_bin (as hex): ", unpack("H*", $digest_bin);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-24
        • 2020-12-19
        • 2012-06-26
        • 1970-01-01
        • 2016-08-28
        相关资源
        最近更新 更多