我需要在 Perl 中hash_hmac('ripemd160', $data, $key)
产生与 PHP相同的结果
设法将其追溯到两个 perl 模块,只是不能让它们一起工作......
摘要::HMAC 和地穴::RIPEMD160
use Crypt::RIPEMD160;
use Digest::HMAC;
$hmac = Digest::HMAC->new('bar', 'Crypt::RIPEMD160');
$hmac->add('foo');
$digest = $hmac->digest;
有人知道我在做什么错吗?
如果我使用上面的代码,我会收到以下错误:Can't call method "add" on an undefined value at /usr/lib64/perl5/vendor_perl/5.12.4/Digest/HMAC.pm 第 28 行。
由于我无法在上面的代码中传递哈希函数引用,在查看了 hmac 函数中的 HMAC 模块后,我想我可以直接在我的代码中编写它:
my $data = 'bar';
my $key = 'foo';
$block_size = 160;
$block_size ||= 64;
$key = Crypt::RIPEMD160->hash($key) if length($key) > $block_size;
my $k_ipad = $key ^ (chr(0x36) x $block_size);
my $k_opad = $key ^ (chr(0x5c) x $block_size);
my $digest = Crypt::RIPEMD160->hash($k_opad, Crypt::RIPEMD160->hash($k_ipad, $data));
这确实会产生哈希,但仍然是错误的
PHP 生成的哈希:isceebbf5cd5e34c888b493cf7f7c39a7b181b65a3
perl 哈希: hash21a2fa2bf39fd99d4c9cdf147added69c32d45f9e
老实说,我不在乎它是如何完成的以及使用什么模块,只要我得到与 php 函数产生的相同的哈希值......此时我很想编写一个我从 perl 调用的 php 脚本来获取那个哈希值。 .. :( 因为我的想法已经用完了...