Как я могу вычислить MD5 хэш файла WAV в Perl? - PullRequest
8 голосов
/ 24 июня 2009

У меня есть файл WAV, и мне нужно рассчитать хэш MD5 его содержимого. Как я могу сделать это с помощью Perl?

Ответы [ 7 ]

19 голосов
/ 24 июня 2009

Для этого есть модуль: Дайджест :: MD5 :: Файл . С его помощью код упрощается до:

use Digest::MD5::File qw( file_md5_hex );
my $md5 = file_md5_hex( $some_file_name );
12 голосов
/ 24 июня 2009

Конечно, вы можете. Просто найдите Digest :: MD5 для части хэширования и любой WAV-связанный модуль , если вы хотите хешировать определенную часть файла (например, пропуская метаданные). 1005 *

9 голосов
/ 24 июня 2009

Использование Дайджест :: 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 голосов
/ 27 января 2015

Следующее, основанное на комментарии пользователя hexten , работает для меня и должно работать лучше, чем ответы, которые обманывают файл:

use Digest::MD5 qw( md5_hex );

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

(в настоящее время) голос с наибольшим количеством голосов предлагает использовать Digest::MD5::File, но это не работает для меня, по крайней мере, в последней сборке Windows ActiveState Perl, и ссылка в ответе теперь не работает.

3 голосов
/ 24 июня 2009

Просто используйте Дайджест :: MD5 .

В зависимости от ваших потребностей, Хеширование восприятия , кстати, тоже может быть интересным. Это позволяет сравнивать файлы, сравнивая их хэши (аналогичное содержимое имеет похожие хэши). Однако до сих пор нет никакой реализации perl AFAIK.

2 голосов
/ 24 июня 2009

Использование Файл :: Slurp с Дайджест :: 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";
0 голосов
/ 26 октября 2018

Или Дайджест :: файл - Perl v5.20.2 в Debian Jessie

# Poor mans "md5sum" command
use Digest::file qw(digest_file_hex);
for (@ARGV) {
print digest_file_hex($_, "MD5"), "  $_\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...