如何在Perl中计算wav文件的MD5哈希值?

时间:2009-06-24 11:30:22

标签: perl md5

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

7 个答案:

答案 0 :(得分:19)

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

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

答案 1 :(得分:12)

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

答案 2 :(得分:9)

使用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);

答案 3 :(得分:3)

只需使用Digest::MD5即可。

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

答案 4 :(得分:3)

基于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版本上不起作用,而答案中的链接现在已经死了。

答案 5 :(得分:2)

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";

答案 6 :(得分:0)

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";
}