3

Perl 中是否有一个包/函数可以让我以一种简单的方式

  • 短信息(例如数字、短字符串)
  • 像哈希值/校验和(例如 MD5)
  • 具有良好的区别(例如像 MDx、SHAx 这样的加密哈希)
  • 表示复杂数据结构的内容(例如散列数组的散列)。

我想到的最好的主意是

  1. 将我的结构序列化为字符串(例如使用 Data::Dumper)

  2. 使用 MDx 对字符串进行哈希处理

但也许有一些更优雅的方式。

4

2 回答 2

6

过去,我使用 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 算法速度的见解,请查看https://metacpan.org/pod/Digest#Digest-speed上的 Digest Perl 模块

希望这可以帮助

于 2018-08-06T22:12:11.520 回答
3

我会考虑使用

串行编码器

我已经将它用于类似的问题并且对它非常满意,它速度很快,提供了我能想到的所有选项,并且根本没有花费我很长时间。

例如,它允许您选择如何处理对象,以及是否对散列上的键进行排序,这非常有用。

玩得开心!

于 2018-08-06T20:47:59.947 回答