私が持っているコード:なぜハッシュ結果は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
理解していないということです
あなたは 'map'とUTF-8エンコーディングを誤解しています。 '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æglandStrangeですが、 'utf8 :: downgrade()'はあなたが見るようにキリル文字では失敗しません。 –