powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / не понимаю работу spring PasswordEncoder (BCryptPasswordEncoder)
14 сообщений из 14, страница 1 из 1
не понимаю работу spring PasswordEncoder (BCryptPasswordEncoder)
    #39226800
kadet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги подскажите плз, не могу понять.
написал два теста чтобы понять как работат кодировщик.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
	private String plainPassword = "admin";
	
	@Test
	public void bCryptPasswordEncoder_test_1(){
		PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
		String encodedPassword = passwordEncoder.encode(plainPassword);
		System.out.println(encodedPassword);
	}

	@Test
	public void bCryptPasswordEncoder_test_2(){
		PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
		String encodedPassword = passwordEncoder.encode(plainPassword);
		System.out.println(encodedPassword);
	}


Результат:
Код: java
1.
2.
$2a$10$rLXvwF4zmfkiABm/mpBsluMISlRJKcHeM/zxFWSiETUEqlVxquajC
$2a$10$O45D79ruNx5oYpUIFFjhN./pbAvirosQorUORERwo1pYP3kn1zika



Вот я не понимаю, как нужно использовать кодировщик. Допустим клиент задал новый паспорт. Я его кодирую

Код: java
1.
hashedPassword = passwordEncoder.encode(plainPassword)


и сохраняю результат в базу. Потом клиент логинится со своим паспортом. Я вытаскиваю для него значение из БД и сравниваю:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
	@Autowired
	private PasswordEncoder passwordEncoder;

       protected void additionalAuthenticationChecks(UserDetails userDetail, UsernamePasswordAuthenticationToken authentication){
                     String hashedPassword = authentication.getCredentials().toString(); // для простоты в реальности такой вызов  => dao.getPasswordFor(sessionUser.getId());
                     String plainSessionPassword = userDetails.getPassword();
                     if(passwordEncoder.match(plainSessionPassword, hashedPassword)){
                             throw new BadCredentialsException("bad credential");
                     }

      }



т.е. я тесты специально положил в надежде увидеть что BCryptPasswordEncoder генерит один и тот же хэш, но это не так. Естественно проверка тоже не работает.

Что я не понимаю или что делаю не правильно ?

заранее благодарен.
...
Рейтинг: 0 / 0
не понимаю работу spring PasswordEncoder (BCryptPasswordEncoder)
    #39226805
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В одном из конструкторов у него есть зависимость от SecureRandom. Это заставляет
думать что инстанциирование BCryptPasswordEncoder() - более сложное чем мы
себе представляем.
...
Рейтинг: 0 / 0
не понимаю работу spring PasswordEncoder (BCryptPasswordEncoder)
    #39226809
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadetЧто я не понимаю или что делаю не правильно ?

То что хэши нужно " подсаливать ".
...
Рейтинг: 0 / 0
не понимаю работу spring PasswordEncoder (BCryptPasswordEncoder)
    #39226819
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadetЕстественно проверка тоже не работает.
Test case с неработающей проверкой в студию!
...
Рейтинг: 0 / 0
не понимаю работу spring PasswordEncoder (BCryptPasswordEncoder)
    #39226820
kadet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ одном из конструкторов у него есть зависимость от SecureRandom. Это заставляет
думать что инстанциирование BCryptPasswordEncoder() - более сложное чем мы
себе представляем.

я тогда вообще не понимаю как это использовать?

Логически если один генератор используется для создания хэш-кода, то он же должен использоваться для сравнения, или не так ? Как тогда по уму сделать ?
...
Рейтинг: 0 / 0
не понимаю работу spring PasswordEncoder (BCryptPasswordEncoder)
    #39226822
kadet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
public class PasswordEncoderTest {
	@Test
	public void standardPasswordEncoder_test(){
		PasswordEncoder passwordEncoder = new StandardPasswordEncoder("secret");
		String password = "admin";
		String encodedPassword = passwordEncoder.encode(password);
		System.out.println(encodedPassword);
	}

	@Test
	public void standardPasswordEncoder_test_2(){
		PasswordEncoder passwordEncoder = new StandardPasswordEncoder("secret");
		String password = "admin";
		String encodedPassword = passwordEncoder.encode(password);
		System.out.println(encodedPassword);
	}

	private String plainPassword = "admin";
	private PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
	
	@Test
	public void bCryptPasswordEncoder_test_1(){
		String encodedPassword = passwordEncoder.encode(plainPassword);
		System.out.println(encodedPassword);
	}

	@Test
	public void bCryptPasswordEncoder_test_2(){
		String encodedPassword = passwordEncoder.encode(plainPassword);
		System.out.println(encodedPassword);
	}
}
...
Рейтинг: 0 / 0
не понимаю работу spring PasswordEncoder (BCryptPasswordEncoder)
    #39226823
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet,

Немного не понятно зачем городить этот огород кодируя и сравнивая пароли вручную, если Spring Security это и так умеет?
...
Рейтинг: 0 / 0
не понимаю работу spring PasswordEncoder (BCryptPasswordEncoder)
    #39226825
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
не понимаю работу spring PasswordEncoder (BCryptPasswordEncoder)
    #39226828
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet
Код: java
1.
public class PasswordEncoderTest {


Не вижу ни одного assert для метода match().
Тесты нужны не для того чтобы в sout писать.
...
Рейтинг: 0 / 0
не понимаю работу spring PasswordEncoder (BCryptPasswordEncoder)
    #39226832
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор не знаю откуда ты копипастил но там другой метод

Код: java
1.
public boolean matches(CharSequence rawPassword,  String encodedPassword)



Пробуй его.
...
Рейтинг: 0 / 0
не понимаю работу spring PasswordEncoder (BCryptPasswordEncoder)
    #39226837
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet
Код: java
1.
2.
3.
if(passwordEncoder.match(plainSessionPassword, hashedPassword)){
                             throw new BadCredentialsException("bad credential");
}



Метод match() откуда взялся?
...
Рейтинг: 0 / 0
не понимаю работу spring PasswordEncoder (BCryptPasswordEncoder)
    #39226858
kadet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мужики !

я входные параметры местами перепутал у метода "passwordEncoder.matchs()". Теперь все работает.

набросал вот это
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
	private String plainPassword = "admin";
	private PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
	
	@Test
	public void bCryptPasswordEncoder_test_1(){
		String encodedPassword = passwordEncoder.encode(plainPassword);
		Assert.assertTrue(passwordEncoder.matches(plainPassword, encodedPassword));
		System.out.println(encodedPassword);
		
		String encodedPassword_2 = passwordEncoder.encode(plainPassword);
		Assert.assertTrue(passwordEncoder.matches(plainPassword, encodedPassword));
		System.out.println(encodedPassword_2);
		
		String encodedPassword_3 = passwordEncoder.encode(plainPassword);
		Assert.assertTrue(passwordEncoder.matches(plainPassword, encodedPassword_2));
		System.out.println(encodedPassword_3);
		
		String encodedPassword_4 = passwordEncoder.encode(plainPassword);
		Assert.assertTrue(passwordEncoder.matches(plainPassword, encodedPassword_3));
		System.out.println(encodedPassword_4);
	}



и удивился, что не смотря на то что "encode" выдает каждый раз новое значение, тем не менее assertTrue работает. Мне это странно, но главное assert глотает.


я извиняюсь, чуть крыша не съехала


спасибо:
Blazkowicz
mayton
...
Рейтинг: 0 / 0
не понимаю работу spring PasswordEncoder (BCryptPasswordEncoder)
    #39226864
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пжлст.
...
Рейтинг: 0 / 0
не понимаю работу spring PasswordEncoder (BCryptPasswordEncoder)
    #39227068
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И тесты надо по другому писать. То что ты написал - не тест.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / не понимаю работу spring PasswordEncoder (BCryptPasswordEncoder)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]