Всем привет, капаясь в 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, даже если положить строку от которой хеш, то там всеровно будет другой хеш так как он будет сырую строку хешировать заново!
Если кто знает, обьясните как это работает! Спасибо!