На сервере не установлено Digest :: SHA 'hmac_sha256_base64', могу ли я вместо этого использовать Digest :: HMAC_SHA1 'hmac_sha1'? - PullRequest
1 голос
/ 21 мая 2019

Я готовлю сценарий CGI, который должен подтвердить, что тело сообщения входящего почтового запроса, когда оно преобразуется в хэш HMAC-SHA256, точно такое же содержимое, которое также входит в тег заголовка того же входящего сообщения. .

Я смог подтвердить с помощью Python, что процедура описана выше, но когда я выполняю те же функции на CGI-скрипте, я не могу сопоставить содержимое и, возможно, это потому, что я не использую правильную библиотеку шифрования / хэширования.

Мой провайдер сервера не имеет библиотеки Digest :: SHA, и поэтому я не могу использовать функцию 'hmac_sha256_base64'. Я не могу попросить их установить его, я просто могу использовать то, что уже доступно.

Я проверил доступные библиотеки, и есть библиотека / функция Digest :: HMAC_SHA1 'hmac_sha1'. Поэтому я делаю следующее:

my $q = CGI->new;
my %headers = map { $_ => $q->http($_) } $q->http();

# below is the secret key, is an example but I am using the good one
my $channel_secret="abcdabcdabcdabcdabcdabcdabcdabcd" 

# Incoming request body string
my $httpRequestBody = $q->param( 'POSTDATA' ); 

# now, I want to use Digest::SHA hmac_sha256_base64 but this server
# does not have it so I am using the following one... 
# because I thought it was the equivalent new function to do the same
# but probably it is not...
use Digest::HMAC_SHA1 'hmac_sha1';
use MIME::Base64 'encode_base64';

$digest = hmac_sha1($httpRequestBody, $channel_secret);
my $signature = encode_base64($digest);

Так что в основном я ожидаю, что эти две переменные содержат одну и ту же строку:

$headers{'A_EXISTING_TAG_OF_THE_HEADER'} 
$signature

Но они совершенно разные. Я подозреваю, что я не использую правильный алгоритм.

Итак, мой вопрос:

Если мой провайдер серверов не включает Digest :: SHA 'hmac_sha256_base64' в доступные библиотеки, то какие еще альтернативы мне нужно сделать, чтобы сделать то же самое? Является ли Digest :: HMAC_SHA1 'hmac_sha1' такой же функциональностью или нет?

1 Ответ

2 голосов
/ 21 мая 2019

Загрузите архив для Digest :: SHA :: PurePerl (ссылка для скачивания на этой странице вы найдете https://metacpan.org/pod/Digest::SHA::PurePerl)

Создайте папку библиотеки, что-то вроде этого

.
|-- library
|   `-- Digest
|       `-- SHA
|           `-- PurePerl.pm
`-- your_script.pl

your_script.pl выглядит следующим образом, вы можете реализовать аналогично:

#!/usr/bin/perl

use lib '.';
use lib '/tmp/iadvd/library/';

use Digest::SHA::PurePerl qw(sha1 sha1_hex);

print sha1_hex('Pradeep'),"\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...