Perl Digest Bcrypt,生成适当的哈希

时间:2019-05-13 18:19:49

标签: perl bcrypt

我写了一个生成Bcrypt哈希的测试程序。此哈希稍后需要由PHP后端进行验证。

这是我的perl代码:

use Digest;
#use Data::Entropy::Algorithms qw(rand_bits);


#my $bcrypt = Digest->new('Bcrypt', cost=>10, salt=>rand_bits(16*8));
my $bcrypt = Digest->new('Bcrypt', cost=>10, salt=>'1111111111111111');
my $settings = $bcrypt->settings(); # save for later checks.
my $pass_hash = $bcrypt->add('bob')->b64digest;
print $settings.$pass_hash."\n";

此打印

$2a$10$KRCvKRCvKRCvKRCvKRCvKOoFxCE1d/OZTKQqhet3bKOq6ZVIACXBU

如果我使用在线https://bcrypt-generator.com

这样的在线bcrypt工具,则不能将其验证为正确的散列

有人可以指出错误吗?谢谢。

1 个答案:

答案 0 :(得分:1)

找出问题所在。我必须使用bcrypt_b64digest而不是b64digest。我希望perl文档更加清晰,其中需要使用它,以便其他bcrypt实现可以“获取”。

my $pass_hash = $bcrypt->add('bob')->bcrypt_b64digest;

来自https://metacpan.org/pod/Digest::Bcrypt#bcrypt_b64digest

  

与“摘要”相同,但将返回使用   bcrypt常用的字母。返回的长度   字符串将为31,并且将仅包含范围内的字符   '0'..'9','A'..'Z','a'..'z','+'和'。'

     

返回的base64编码字符串未填充为4的倍数   个字节长。注意:这是bcrypt自己的非标准base64字母,   它与标准的MIME base64编码不兼容。

相关问题