我正在尝试编写一些 Perl 以与其他语言(此时为 Java)的哈希函数进行互操作。我们已经找到了大概是正确的来源,RFC 4868其中包括一些测试键和字符串及其散列值。我正在使用以下代码片段,但无法让 Perl 得出相同的结果。我只能假设我使用不当 - 谁能指出正确的方向?
use Digest::SHA qw(hmac_sha512_hex);
my $key = '0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b';
my $value = '4869205468657265';
print hmac_sha512_hex($value, $key);
输出是“4ef7 ... 5d40”,尽管 RFC 4868(和我同胞的 Java 实现)返回“87aa ... 6854”
最佳答案
use Digest::SHA qw(hmac_sha512_hex);
my $key = pack('H*','0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b');
my $value = "Hi There";
print hmac_sha512_hex($value, $key);
给予
87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854
引用 RFC:
Key = 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
0b0b0b0b (20 bytes)
Data = 4869205468657265 ("Hi There")
PRF-HMAC-SHA-512 = 87aa7cdea5ef619d4ff0b4241a1d6cb0
2379f4e2ce4ec2787ad0b30545e17cde
daa833b7d6b8a702038b274eaea3f4e4
be9d914eeb61f1702e696c203a126854
附言将 '0x'
添加到字符串不会使其成为二进制,而是使其以 '0'
和 'x'
开头 ;-)
关于perl - 为什么 Digest::SHA 产生的散列与 RFC 4868 中显示的散列不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1467555/