2

hash_hmac('ripemd160', $data, $key)PHPで生成するのと同じ結果をPerlで生成する必要があります

それを 2 つの perl モジュールまでたどることができましたが、それらを一緒に動作させることはできません...

Digest::HMAC と Crypt::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 スクリプトを書きたくなります。 .. :( アイデアが尽きたので...

4

3 に答える 3