Рубрики
Без рубрики

Весенняя безопасность : Закодированный пароль не похож на BCrypt

– Пружинная Защита : Закодированный пароль не похож на BCrypt

В Spring Security аутентификация базы данных с помощью bcrypt хэширования паролей.

  import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  import org.springframework.security.crypto.password.PasswordEncoder;
  //...
	String password = "123456";
	PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
	String hashedPassword = passwordEncoder.encode(password);
  
	
	    
	    //...
	
  
CREATE  TABLE users (
  username VARCHAR(45) NOT NULL ,
  password VARCHAR(45) NOT NULL ,
  enabled TINYINT NOT NULL DEFAULT 1 ,
  PRIMARY KEY (username));

Просмотрите отладочный вывод, всегда говорится ” Закодированный пароль не похож на BCrypt “, даже если указан правильный пароль.

//...
12:56:31.868 DEBUG o.s.jdbc.datasource.DataSourceUtils - Returning JDBC Connection to DataSource
12:56:31.868 WARN  o.s.s.c.bcrypt.BCryptPasswordEncoder - Encoded password does not look like BCrypt
12:56:31.868 DEBUG o.s.s.a.d.DaoAuthenticationProvider - Authentication failed: password does not match stored value

Решение

В алгоритме bcrypt хэширования каждый раз генерируется другое значение хэша длиной 60, например

$2a$10$LOqePml/koRGsk2YAIOFI.1YNKZg7EsQ5BAIuYP1nWOyYRl21dlne

Распространенная ошибка, длина столбца “пароль” (таблица пользователей) меньше 60, например, пароль VARCHAR(45) , и некоторые базы данных будут автоматически усекать данные. Таким образом, вы всегда получаете предупреждение “Закодированный пароль не похож на BCrypt”.

Чтобы решить эту проблему , убедитесь, что длина столбца “пароль” составляет не менее 60.

Оригинал: “https://mkyong.com/spring-security/spring-security-encoded-password-does-not-look-like-bcrypt/”