Вывод HMAC SHA512 зависит от Perl

Я заметил, что вывод 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";

Я запускаю этот скрипт два раза и получаю тот же результат:

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

как мне это исправить?


person Neon Flash    schedule 27.03.2013    source источник


Ответы (2)


Данные, которые вы передаете в hmac_sha512_hex, интерпретируются как строка. Вы передаете его как ссылку на хэш. Вы можете проверить это, распечатав значение $data перед передачей его в функцию.

Ваша ссылка — это просто уникальный идентификатор вашего хэша. Perl не гарантирует, что вы получите одну и ту же хэш-ссылку для одних и тех же данных при разных запусках вашей программы. Поэтому вы передаете разные значения в hmac_sha512_hex, что, очевидно, даст вам другой результат.

Если вы хотите, чтобы выходные данные были одинаковыми, вам нужно найти способ каждый раз передавать одну и ту же строку в функцию. Одним из простых подходов может быть использование строки, которую вы возвращаете из Data::Dumper'. s Функция сброса.

Обновление: если вы используете Data::Dumper, вам нужно установить $Data::Dumper::Sortkeys в истинное значение.

person Dave Cross    schedule 27.03.2013
comment
Также можно использовать метод замораживания в модуле Storeable для сериализации. - person imran; 27.03.2013
comment
Спасибо. Я понял. На самом деле данные, на которых я вычисляю HMAC SHA512, представляют собой данные POST, которые должны быть отправлены в HTTP-запросе на сервер. Как я могу вычислить это правильно? - person Neon Flash; 27.03.2013
comment
Покажите нам пример данных POST. - person imran; 27.03.2013
comment
Спасибо. Я исправил это. Вы можете просто записать данные POST как param1=value1¶m2=value2 и вычислить для них HMAC SHA512. Оно работает :) - person Neon Flash; 27.03.2013

Когда вы передаете $data функции hmac_sha512_hex, вы передаете адрес переменной, который будет меняться каждый раз, когда вы запускаете программу. Вам нужно будет последовательно изучить сериализацию вашего хэша в строку.

person imran    schedule 27.03.2013