Perl: контрольная сумма сложной структуры данных

Есть ли в Perl пакет / функция, которая дает мне простой способ

  • краткая информация (например, число, короткая строка)
  • как хэш-значение / контрольная сумма (например, MD5)
  • с хорошим различием (например, криптографический хеш, такой как MDx, SHAx)
  • представляет содержание сложной структуры данных (например, хэш массивов хэшей).

Лучшая идея, которую я имею в виду,

  1. сериализовать мою структуру в строку (например, с помощью Data::Dumper)

  2. Хеш над строкой с MDx

Но, может быть, есть более элегантный способ.

2 ответа

Решение

В прошлом я использовал Data::Dumper (с отсортированными ключами, как указано @mob) + подход Digest::MD5 для создания контрольных сумм сложных структур данных. В моем случае целью было сравнить две или более структуры данных на предмет равенства.

(Очень) Простой фрагмент:

use Data::Dumper qw( Dumper ) ;
use Digest::MD5 qw( md5_hex) ;

sub digest {
    my $data = shift ;
    local $Data::Dumper::SortKeys = 1;
    return md5_hex( Dumper($data) ) ;
}

Сводка:

my $cplx_data_checksum = digest({ 
    c => 1 , 
    b => [ 1 , { a => 2 } ]
}) ;

Для получения информации о скорости работы Digest algo, пожалуйста, обратитесь к модулю Digest Perl по адресу https://metacpan.org/pod/Digest.

Надеюсь это поможет

Я хотел бы рассмотреть возможность использования

Sereal Encoder

Я использовал его для решения аналогичной проблемы и был очень доволен, он быстр, предлагает все варианты, которые мне могут понадобиться, и не заставил себя долго ждать.

Например, он позволяет вам выбирать, как обращаться с объектами и сортировать ли ключи по хешам, что может быть очень полезно.

Повеселись!

Другие вопросы по тегам