我正在准备一个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'是否具有相同的功能?
答案 0 :(得分:2)
下载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";