0

特定のデータとキーに対する HMAC SHA512 の出力が、スクリプトを実行するたびに変化することを確認しました。

最初に、出力が変化しないスクリプトの例を取り上げます。

#! /usr/bin/perl

use Digest::SHA qw(hmac_sha512_hex);
use warnings;

$data="test";
$key="20202020";

print hmac_sha512_hex($data,$key),"\n";

このスクリプトを 2 回実行すると、同じ出力が得られます。

perl test.pl
457a1ff378f11880defaa91675de4633d1f1e69712b5dccd2f86612224b825b4461a9215a37cce53
8e7f5de43a6900867667b9361af38df32fc58e54d7ce9a02

perl test.pl
457a1ff378f11880defaa91675de4633d1f1e69712b5dccd2f86612224b825b4461a9215a37cce53
8e7f5de43a6900867667b9361af38df32fc58e54d7ce9a02

ここで、スクリプトのデータ変数を次のように変更します。

#! /usr/bin/perl

use Digest::SHA qw(hmac_sha512_hex);
use warnings;

$data={'method' => 'test', 'value' => 21};
$key="20202020";

print hmac_sha512_hex($data,$key),"\n";

スクリプトを実行するたびに出力が異なります。

perl test.pl
cb1a40ba7a7f52da39dc0a3f130399dfbecb5249946057fd19887b72a58701f28452f6e663153bb6
85a4b86f9d427de4af5904801e11cb6fcbc272344605c2a9

perl test.pl
73dd1678a4e7f29f8032a65cbe979248b3e41cd6ed7aa81e5b214b8b6232af1e7a6683412b8532b7
187313d2c2a96c7e5009a9362690f355028b56ca319825e4

これを修正するにはどうすればよいですか?

4

2 に答える 2

3

渡すデータhmac_sha512_hexは文字列として解釈されます。ハッシュへの参照として渡しています。$dataこれは、関数に渡す前にの値を出力することで確認できます。

参照は、ハッシュの一意の識別子にすぎません。Perl は、プログラムの異なる実行で同じデータに対して同じハッシュ参照を取得することを保証しません。したがって、異なる値を渡すhmac_sha512_hexと、明らかに異なる出力が得られます。

出力を同じにしたい場合は、毎回同じ文字列を関数に渡す方法を見つける必要があります。簡単な方法の 1 つは、Data::Dumperの Dumper 関数から返される文字列を使用することです。

更新: Data::Dumper を使用する場合は$Data::Dumper::Sortkeys、true 値に設定する必要があります。

于 2013-03-27T17:30:13.037 に答える
1

$data を hmac_sha512_hex 関数に渡すと、プログラムを実行するたびに変化する変数のアドレスが渡されます。一貫した方法でハッシュを文字列にシリアライズすることを検討する必要があります。

于 2013-03-27T17:29:24.997 に答える