@P_Alexander
First head

Как работает matches из BCryptPasswordEncoder.class java?

Всем привет, капаясь в BCryptPasswordEncoder некоторый момент мне не понятен, а именно:
Пример
@Test
    public void matchesTwoPassTest() {
        boolean resultOne = false;
        boolean resultTwo = false;
        boolean resultThree = false;
        String one = "alex";
        String two = "alex";
        String three = "alex";
        String oneEnc = "";
        String twoEnc = "";
        oneEnc = bCryptPasswordEncoder.encode(one);
        twoEnc = bCryptPasswordEncoder.encode(two);
        resultOne = bCryptPasswordEncoder.matches(two, oneEnc);
        resultTwo = bCryptPasswordEncoder.matches(one, twoEnc);
        resultThree = bCryptPasswordEncoder.matches(three, twoEnc);
        logger.debug(one +  " ONE ENCODE STRING " + oneEnc);
        logger.debug(two +  " TWO ENCODE STRING " + twoEnc);
        logger.debug("result : " + resultOne);
        logger.debug("result : " + resultTwo);
        assertTrue(resultOne);
        assertTrue(resultTwo);
        assertTrue(resultThree);
    }

Хеши двух одинаковых переменных one, two - разные!
В метод matches я ложу хеш от другой переменной, но возвращает он ТРУ!
Глуповатый вопрос но все же не понятно, у него что какой-то буфер там или что?
Если он хеширует с рандомной солью то в строчке вызова метода matches, даже если положить строку от которой хеш, то там всеровно будет другой хеш так как он будет сырую строку хешировать заново!
Если кто знает, обьясните как это работает! Спасибо!
  • Вопрос задан
  • 34 просмотра
Решения вопроса 1
@mayton2019
Ent. Software engineer. Oracle. SQL. BigData.
По документации енкодер добрвляет 8 байтную случайную salt. На матчер это не оказывает влияния.

Видимо так и задумано.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы