【问题标题】:How can I calculate the MD5 hash of a wav file in Perl?如何在 Perl 中计算 wav 文件的 MD5 哈希?
【发布时间】:2009-06-24 11:30:21
【问题描述】:

我有一个 wav 文件,我需要计算其内容的 MD5 哈希值。我如何使用 Perl 做到这一点?

【问题讨论】:

    标签: perl md5


    【解决方案1】:

    它有一个模块:Digest::MD5::File。有了它,代码被简化为:

    use Digest::MD5::File qw( file_md5_hex );
    my $md5 = file_md5_hex( $some_file_name );
    

    【讨论】:

    • 链接已失效,代码无法运行(至少对我而言,在活动状态 perl 的默认 win64 构建中)
    【解决方案2】:

    当然可以。只需查找 Digest::MD5 的散列部分,如果要散列文件的特定部分(例如,跳过元数据),则查找 any WAV-related module

    【讨论】:

      【解决方案3】:

      使用Digest::MD5

      use Digest::MD5 qw(md5);
      my $hash;
      {
          local $/ = undef;
          open FILE, "$wav_file_name";
          binmode FILE;
          my $data = <FILE>;
          close FILE;
          $hash = md5($data);
      }
      

      或者您可以使用 OO 接口:

      use Digest::MD5;
      
      open FILE, "$wav_file_name";
      
      my $ctx = Digest::MD5->new;
      $ctx->addfile (*FILE);
      my $hash = $ctx->digest;
      close (FILE);
      

      【讨论】:

      • 使用 File::Slurp: 更好地啜饮:
      • 或者根本不吃整个文件... WAV 文件可能很大,Digest::MD5 将从文件句柄中读取:打开我的 $fh、'new->add_file($fh)->hexdigest;
      【解决方案4】:

      只需使用Digest::MD5

      顺便说一句,根据您的需要,Perceptual Hashing 也可能很有趣。它允许您通过比较文件的哈希值来比较文件(相似的内容具有相似的哈希值)。但是仍然没有任何 perl 实现 AFAIK。

      【讨论】:

        【解决方案5】:

        基于a comment by user hexten 的以下内容对我有用,并且应该比那些扼杀文件的答案更好:

        use Digest::MD5 qw( md5_hex );
        
        open my $fh, '<', $file;
        my $md5 = Digest::MD5->new->addfile($fh)->hexdigest;
        close $fh;
        

        (当前)投票最多的答案建议使用Digest::MD5::File,但至少在 ActiveState Perl 的最新 Windows 版本中这对我不起作用,并且答案中的链接现在已失效。

        【讨论】:

          【解决方案6】:

          File::SlurpDigest::MD5 一起使用:

          #!/usr/bin/perl
          
          use strict;
          use warnings;
          
          use Digest::MD5 qw(md5_hex);
          use File::Slurp;
          
          my ($input) = @ARGV;
          
          write_file "$input.md5", md5_hex(scalar read_file $input, binmode => ':raw'), "\n";
          

          【讨论】:

            【解决方案7】:

            Digest::file - Debian Jessie 中的 Perl v5.20.2

            # Poor mans "md5sum" command
            use Digest::file qw(digest_file_hex);
            for (@ARGV) {
            print digest_file_hex($_, "MD5"), "  $_\n";
            }
            

            【讨论】:

              猜你喜欢
              • 2015-12-18
              • 2012-05-06
              • 2012-04-14
              • 1970-01-01
              • 2021-06-19
              • 2010-10-20
              • 2017-01-27
              • 1970-01-01
              • 2011-12-08
              相关资源
              最近更新 更多