Perl Digest Bcrypt, генерирующий правильный хеш - PullRequest
0 голосов
/ 13 мая 2019

Я написал тестовую программу, которая генерирует хеш 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

Это не считается правильным хэшем, если я использую онлайн-инструмент bcrypt, такой как https://bcrypt -generator.com

Может кто-нибудь указать на ошибку? Спасибо.

1 Ответ

1 голос
/ 13 мая 2019

Разобрался с проблемой. Я должен использовать bcrypt_b64digest вместо b64digest. Мне бы хотелось, чтобы документация на Perl была более понятной, в которой нужно ее использовать, чтобы другие реализации bcrypt могли «получить ее».

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

С https://metacpan.org/pod/Digest::Bcrypt#bcrypt_b64digest

То же, что и "digest", но вернет дайджест base64, закодированный с использованием алфавит, который обычно используется с bcrypt. Длина возвращена строка будет 31 и будет содержать только символы из диапазонов '0' .. '9', 'A' .. 'Z', 'a' .. 'z', '+' и '.'

Возвращенная строка в кодировке base64 не дополняется кратным 4 длинные байты. Примечание: это собственный нестандартный алфавит bcrypt base64, Он не совместим со стандартной кодировкой MIME base64.

...