9

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

4

7 回答 7

20

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

use Digest::MD5::File qw( file_md5_hex );
my $md5 = file_md5_hex( $some_file_name );
于 2009-06-24T14:36:35.867 回答
12

你当然可以。如果您想对文件的特定部分进行哈希处理(例如,跳过元数据),只需查找哈希部分的Digest::MD5以及任何与 WAV 相关的模块。

于 2009-06-24T11:32:32.993 回答
9

使用摘要::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);
于 2009-06-24T11:44:48.490 回答
3

只需使用Digest::MD5

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

于 2009-06-24T11:33:09.590 回答
3

以下内容,基于用户 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 版本中对我不起作用,并且答案中的链接现在已经失效。

于 2015-01-27T04:30:43.367 回答
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";
于 2009-06-24T13:54:56.420 回答
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";
}
于 2018-10-26T20:51:09.710 回答