我需要为Perl中的一堆数据生成校验和,我遇到了这个Digest :: MD5模块。看起来它符合要求,但我想我会在这里询问是否有人有任何建议或可能知道更好的模块使用,甚至可能更合适的摘要算法。正在散列的是大约10个表的数据(一次一个逻辑元组)。这将是我第一次使用校验和,所以任何提示,技巧,陷阱都会非常感激。
编辑:据我所知,Digest:MD5没有任何问题,但我从未使用它,也不熟悉哈希算法。我希望有经验的人能告诉我我是否在正确的轨道上。在走得太远之前,只是想要一点确认。
答案 0 :(得分:9)
是的,Digest::MD5会做到这一点;它是由Gisle Aas(LWP的作者和其他优秀软件包)编写的,并且有good reviews & ratings on cpanratings,这两者都应该让你放心,这是一个不错的选择。
使用它可以很简单:
my $checksum = Digest::MD5::md5_hex($data);
如果您认为将来可能会更改所选的摘要算法(例如,使用SHA-1),您可能需要考虑使用Digest代替 - 也由Gisle Aas编写,并提供各种Digest模块的简单接口。
例如:
my $digest = Digest->new('MD5');
$digest->add($data); # to add data from a scalar, or:
$digest->add_file($filehandle); # to add data read from a filehandle
my $checksum = $digest->hexdigest; # or just ->digest for binary
这种方法的好处是您可以将“MD5”更改为例如“SHA-1”,你已经完成了。
为了完整起见,我将添加为什么您可能希望设计能够轻松使用其他哈希算法 - 如果这被用于任何安全目的,MD5已被证明易受哈希冲突的攻击 - 美国部门国土安全部advises that MD5 "should be considered cryptographically broken and unsuitable for further use"。但是,对于数据完整性的一般检查,它仍然是许多人可接受的选择,并得到广泛支持。
SHA-1也被视为弱; SHA-2被认为是用于加密目的的安全散列的最佳选择。