jBCrypt серьезная проблема с checkpw (вернуть истину, когда не следует?)

РЕДАКТИРОВАТЬ: Хорошо, я нашел здесь ответ BCrypt говорит, что похожие пароли эквивалентны - проблема со мной, драгоценным камнем или областью криптографии?

Новый вопрос, однако, как кто-то может рекомендовать использовать bCrypt для хеширования, если вам нужно ограничить длину пароля пользователя в мире, где мы находимся Попытка научить пользователей подбирать все более сложные пароли, даже парольную фразу, говоря, что ваш пароль должен быть короче n символов, кажется способом попасть в скриншоты thedailywtf.com Friday:)

Исходный вопрос ниже:

I Я реорганизовал старую страницу входа в систему для приложения и решил испытать bCrypt с помощью реализации JAVA jBCrypt ( http://www.mindrot.org/projects/jBCrypt/ ) и наткнулся на одно крупное шоу стоппер.

Проблема заключается в методе checkpw , который, кажется, всегда возвращает истину при использовании очень длинного начального числа. Я собирался объединить пароль пользователя с помощью {InternalSalt} {username} {password}, ​​а затем хэшировать его с помощью bCrypt.

Итак, у меня есть следующий код (максимально урезанный, чтобы изолировать checkpw).

public class Test {
public static void main(String[] args) {
    String plaintext = "jw~ct/f61y1m7q458GiLVQpiqDK|8kG=d368Id:D@$^_80I{qrn1HM6423{FtestAccountO1nu3jKN";

    String pw_hash = BCrypt.hashpw(plaintext, BCrypt.gensalt());

    if (BCrypt.checkpw("jw~ct/f61y1m7q458GiLVQpiqDK|8kG=d368Id:D@$^_80I{qrn1HM6423{FtestAccountO1nu3jKN", pw_hash))
        System.out.println("It matches");
    else
        System.out.println("It does not match");

}

}

Это, как и должно быть, напечатает «Соответствует».

У меня возникшая проблема заключается в том, что вы добавляете say aaa к паролю, который вы передаете для checkpw, делая его

BCrypt.checkpw ("jw ~ ct / f61y1m7q458GiLVQpiqDK | 8kG = d368Id: D @ $ ^ _ 80I {qrn1HM6423 {FtestAccountO1nu3jKNaaa", pw_hash)

Он все равно возвращается! Не совсем то, что я ожидал. Я не вижу никаких ограничений длины пароля в документе, но я не могу воспроизвести его с меньшим начальным значением пароля, также похоже, что если я изменю что-либо еще, кроме конца строки, он будет работать, как ожидалось, возвращая false.

Я что-то важное пропустил? Я знаю, что не должен быть единственным, кто использует jBcrypt на этом форуме, поскольку я видел, что BCrypt рекомендован во многих сообщениях, когда проводил некоторое исследование.

РЕДАКТИРОВАТЬ: Windows 7 64 бит - Java (TM) SE Runtime Environment (сборка 1.6.0_24 -b07)

6
задан Community 23 May 2017 в 12:23
поделиться