gpt4 book ai didi

在 PHP 中替代 hash_hmac ('ripemd160' , $data, $key) 的 Perl

转载 作者:行者123 更新时间:2023-12-03 23:08:58 25 4
gpt4 key购买 nike

我需要在 Perl 中生成与 hash_hmac('ripemd160', $data, $key) 在 PHP 中生成的结果相同的结果

设法将其追溯到两个 perl 模块,只是无法让它们一起工作...

Digest::HMAC 和 Crypt::RIPEMD160

use Crypt::RIPEMD160;

use Digest::HMAC;
$hmac = Digest::HMAC->new('bar', 'Crypt::RIPEMD160');

$hmac->add('foo');
$digest = $hmac->digest;

有人知道我做错了什么吗?

如果我使用上面的代码,我会得到以下错误:无法在/usr/lib64/perl5/vendor_perl/5.12.4/Digest/HMAC.pm 第 28 行的未定义值上调用方法“add”。

由于我无法在上面的代码中传递散列函数引用,在查看 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 函数生成的哈希值相同...此时我很想写一个 php 脚本,我从 perl 调用它只是为了得到那个哈希... :( 因为我没有想法了...

最佳答案

Digest::HMAC 只包括Digest::HMAC_MD5Digest::HMAC_SHA1。但是,我查看了 Digest::HMAC_MD5 的 Perl 代码。整个事情大约是 20 行代码。它基本上创建了两个方法:

sub hmac_md5 {
hmac($_[0], $_[1], \&md5, 64);
}

sub hmac_md5_hex {
unpack("H*", &hmac_md5);
}

这几乎就是整个程序。

如果您忘记了包的面向对象风格,而使用函数式 风格,看起来这可能适合您:

hmac($data, $key, \&ripemd160, 160);

或者可能只是:

hmac($data, $key \&ripemd160);

事实上,CPAN 上记录了这一点 Digest::HMAC页面本身。

关于在 PHP 中替代 hash_hmac ('ripemd160' , $data, $key) 的 Perl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16092584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com