我写了一个生成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工具,则不能将其验证为正确的散列有人可以指出错误吗?谢谢。
答案 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编码不兼容。