Есть ли способ проверить созданные php хэши bcrypt с помощью spring security?

Контекст

Я имею дело с системой PHP, использующей обновленный алгоритм bcrypt (поскольку в базовом алгоритме есть известная уязвимость).

Таким образом, функция PHP password_hash теперь генерирует хэши с префиксом $2y$, поскольку старые (с префиксом $2a) были уязвимы.

BCrypt Spring Security, который я использую в другой системе Java, генерирует исходные хэши формата $2a$, поскольку его основная реализация (jBCrypt вместо C BCrypt как упомянутый в этом сообщении SO) не была уязвима для той же атаки.

Проблема

Проверка PHP-генерируемых хэшей в Spring Security не работает. Есть ли способ проверить сгенерированные PHP хэши с помощью Spring Security?

Пример

php > $pwd = password_hash('foo', PASSWORD_BCRYPT, ['cost' => 12]);
php > echo $pwd;
$2y$12$TRc5ZjcmDJ8oFaoR1g7LD.RCxBTUZnGXB66EN9h9rKtNWg.hd7ExK

затем с помощью Java + Spring Security:

@Test
public void decryptsPhpHash() {
    boolean result = BCrypt.checkpw("foo", "$2y$12$TRc5ZjcmDJ8oFaoR1g7LD.RCxBTUZnGXB66EN9h9rKtNWg.hd7ExK");
    assertThat(result).isTrue();
}

выдает следующую ошибку:

java.lang.IllegalArgumentException: Invalid salt revision

1
0
197
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Насколько мне известно, PHP просто изменил символ a на y, чтобы отличить его от себя. Только PHP изменил этот префикс. Так что, возможно, простое изменение y обратно на a решит эту проблему.

In June 2011, a bug was discovered in crypt_blowfish, a PHP implementation of BCrypt. It was mis-handling characters with the 8th bit set. They suggested that system administrators update their existing password database, replacing $2a$ with $2x$, to indicate that those hashes are bad (and need to use the old broken algorithm). They also suggested the idea of having crypt_blowfish emit $2y$ for hashes generated by the fixed algorithm. Nobody else, including canonical OpenBSD, adopted the idea of 2x/2y. This version marker change was limited to crypt_blowfish. https://en.wikipedia.org/wiki/Bcrypt

Другие вопросы по теме