내가 가진 코드 :왜 해시 결과는 UTF8 기능을 적용 할 때 다른
push my(@list), $x;
utf8::upgrade($tmp = $x); push @list, $tmp;
utf8::downgrade($tmp = $x); push @list, $tmp;
push @list, Encode::encode_utf8($x);
push @list, Encode::decode_utf8($x);
print Digest::SHA::hmac_sha256_hex($_), "\n" for @list
d9fa76e37bfe94cfcb0011cf070316775e52845021ee92d9bebe8ef289f87e16
d9fa76e37bfe94cfcb0011cf070316775e52845021ee92d9bebe8ef289f87e16
d9fa76e37bfe94cfcb0011cf070316775e52845021ee92d9bebe8ef289f87e16
d9fa76e37bfe94cfcb0011cf070316775e52845021ee92d9bebe8ef289f87e16
d9fa76e37bfe94cfcb0011cf070316775e52845021ee92d9bebe8ef289f87e16
왜 $ x를 фыва
등 해시가 다른이며, programm에 추락 할 때 :
09165674df9a2eada20acb972bbf71d4cb5637b152d84568fd2e8fcbe9d61188
09165674df9a2eada20acb972bbf71d4cb5637b152d84568fd2e8fcbe9d61188
09165674df9a2eada20acb972bbf71d4cb5637b152d84568fd2e8fcbe9d61188
36cdc4291ac91e26f76a208feb90e8a5a35729d54660bbb63acdb82746f7ec6a
Wide character in subroutine entry at ./t3.pl line 7.
저를주십시오 utf8 마법에 관한 약간의 빛. 고맙습니다. 내가 표시를 확인하여 데이터 무결성을 확인해야합니다 응용 프로그램에서
UPD
. 데이터가 UTF8 형식으로 제공되는 경우가 있습니다. 그 사건을 처리하지 않기 전에. 내가 들어오는 데이터에 이런 저런 기능을 적용하면 어떻게 될지 확인 병행
Digest::SHA::hmac_sha256_hex(Encode::encode_utf8($data))
: 후 여기에 내가 그 기호를 확인하기 위해 노력하고는 변경되지 않습니다.
그래, 난 UTF8을 이해하지 못하는, 그래서 가장 중요한 이유는 당신이utf8::downgrade
가 무엇을 이해하지 않은 것입니다
UTF-8 인코딩뿐만 아니라'map'도 오해하고 있습니다. 'map '은 원 목록의 모든 요소에 동일한 규칙을 적용하여 목록을 다른 목록으로 변환하는 도구입니다. 목록의 각 요소 인쇄와 같은 부작용에 사용해서는 안되며, 특히 반환 된 목록을 삭제할 때 사용하십시오. 그래서'map {print Digest :: SHA :: hmac_sha256_hex ($ _), "\ n"} @list'는 아마도'print Digest :: SHA :: hmac_sha256_hex ($ _), "\ n"for @ list'이어야합니다. . – Borodin
인수가 ASCII로 표현 될 수 없다면'utf8 :: downgrade()'는 실패합니다. 그래서 그것은 키릴 문자에 대해서는 실패 할 것입니다. 또한'Digest :: SHA :: hmac_sha256_hex()'는 인수를 바이트로 요구하므로 넓은 문자에 대해서는 실패합니다. –
@ HåkonHægland Strange이지만 utf8 :: downgrade()는 볼 수 있듯이 키릴 문자로는 실패하지 않습니다. –