摘要:: SHA和utf8

时间:2014-01-23 18:02:22

标签: perl utf-8 digest

我有utf8数据,我按以下方式传递给DIGEST :: SHA:

my $sha1=Digest::SHA->new;  

foreach (@fields ) {  $sha->add($record)       }
        print $sha1->hexdigest;

但是我得到了意想不到的行为,每次我在同一条记录上得到不同的摘要我在http://metacpan.org/pod/Digest::SHA上读到使用带有UTF8的Digest SHA会产生副作用 我尝试了以下的调查,但都不起作用:

{use bytes;

foreach (@fields ) {  $sha->add($record)       }
        print    $sha1->hexdigest;
 }

 use Encode qw(encode_utf8);
  foreach (@fields ) {  $sha->add((encode_utf8($record))       }
        print    $sha1->hexdigest;

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果没有看到您的实际数据(例如use Data::Dumper; $Data::Dumper::Useqq=1; print Dumper $record;)以及您期望的SHA,则很难提供帮助。

也就是说,您可能会发现获得一致SHA的最简单方法是强制json编码仅输出ASCII并确保它始终以一致的顺序放置哈希元素:

use JSON;
$serialized = JSON::to_json( $data_structure, { 'ascii' => 1, 'canonical' => 1 } );