【发布时间】:2009-06-24 11:30:21
【问题描述】:
我有一个 wav 文件,我需要计算其内容的 MD5 哈希值。我如何使用 Perl 做到这一点?
【问题讨论】:
我有一个 wav 文件,我需要计算其内容的 MD5 哈希值。我如何使用 Perl 做到这一点?
【问题讨论】:
它有一个模块:Digest::MD5::File。有了它,代码被简化为:
use Digest::MD5::File qw( file_md5_hex );
my $md5 = file_md5_hex( $some_file_name );
【讨论】:
当然可以。只需查找 Digest::MD5 的散列部分,如果要散列文件的特定部分(例如,跳过元数据),则查找 any WAV-related module。
【讨论】:
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);
【讨论】:
只需使用Digest::MD5。
顺便说一句,根据您的需要,Perceptual Hashing 也可能很有趣。它允许您通过比较文件的哈希值来比较文件(相似的内容具有相似的哈希值)。但是仍然没有任何 perl 实现 AFAIK。
【讨论】:
基于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 版本中这对我不起作用,并且答案中的链接现在已失效。
【讨论】:
将File::Slurp 与Digest::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";
【讨论】:
或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";
}
【讨论】: