Подтвердить что ты не робот

Spring Безопасность Шифрование MD5

У меня есть веб-приложение java с использованием инфраструктуры spring и spring безопасности для его входа в систему. В моей базе данных перед сохранением моих паролей, зашифрованных до MD5. Я добавил в свой код приложения-config.xml эти коды

 <security:authentication-provider>
<security:password-encoder hash="md5"/>
<security:jdbc-user-service
        data-source-ref="dataSource"
        users-by-username-query="select user_name username, user_password password, 1 enabled from users where user_name=?"
        authorities-by-username-query="select username, authority from authorities where username=?" />
</security:authentication-provider>

Сначала он работал, когда пароль в db не был зашифрован. Но когда я зашифровал его и добавил этот фрагмент в конфигурацию моего приложения

      <security:password-encoder hash="md5"/>

Я не могу войти.

4b9b3361

Ответ 1

Как вы создаете хеши MD5? Что-то вроде следующего хорошо работает в Java:

MessageDigest messageDigest = MessageDigest.getInstance("MD5");  
messageDigest.update(user.getPassword().getBytes(),0, user.getPassword().length());  
String hashedPass = new BigInteger(1,messageDigest.digest()).toString(16);  
if (hashedPass.length() < 32) {
   hashedPass = "0" + hashedPass; 
}

Когда вы кодируете "koala", вы получаете "a564de63c2d0da68cf47586ee05984d7"?

Ответ 2

Я понимаю, что это немного поздно, но Spring имеет встроенные классы, которые делают это намного проще.

@Test
public void testSpringEncoder() {
    PasswordEncoder encoder = new Md5PasswordEncoder();
    String hashedPass = encoder.encodePassword("koala", null);

    assertEquals("a564de63c2d0da68cf47586ee05984d7", hashedPass);
}

Это unit test, который я написал с использованием встроенного кода безопасности Spring, он намного меньше кода MessageDigest, и поскольку вы используете Spring Security уже, вы должны иметь классы в своем пути к классам уже.

Ответ 3

Вы прочитали 6.3.3 Хеширование и аутентификация в разделе Spring Справочное руководство по безопасности? Он упомянул о некоторых возможных проблемах, которые могут возникнуть при использовании хеширования паролей.

Некоторые возможности, которые он перечисляет:

  • Хэширование пароля базы данных может быть в Base64, а результат MD5PasswordEncoder - в шестнадцатеричных строках
  • Хэш вашего пароля может быть в верхнем регистре, в то время как результат от кодера находится в строках нижнего регистра.