2014-01-23 2 views
2

은 내가 소화 :: SHA를 다음과 같은 방식으로 전달 UTF8 데이터가 있습니다다이제스트 :: SHA 및 UTF8

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

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

을하지만 난 예기치 않은 동작을 얻고 난 다른 얻을 때마다 같은 레코드 소화 전 UTF8 난 다음 metigation을 시도 와 다이제스트 SHA를 사용하는 부작용이 있다는 것을 http://metacpan.org/pod/Digest::SHA에 읽을 수 있지만 둘 다하지 작동합니다

{use bytes; 

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

감사합니다. 감사드립니다.

+0

당신의 천국 '고 말했다

, 일관된 SHA를 얻을 수있는 가장 쉬운 방법을 찾을 수 있습니다 확신 항상 일관된 위해 해시 요소를두고 출력 만 ASCII로 JSON 인코딩을 강제하는 것입니다 '$ record'에있는 정보와 질문에 대한 답을 얻을 수있는 정보를 제공했습니다. – cjm

+0

레코드가 db에서 왔고 json으로 인코딩 된 json이 서브로 인 코드 – smith

+0

'use bytes; '를 사용하지 마십시오. 해당 문서를 참조하십시오. /// 두 가지가 다른 해시를 생성하는 것은 명확하지 않으므로 계속 진행할 필요가 없습니다. – ikegami

답변

1

실제 데이터 (예 : use Data::Dumper; $Data::Dumper::Useqq=1; print Dumper $record;)가 보이지 않고 원하는 SHA가 표시되지 않으면 도움이되지 않습니다.

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