Spring Security Encrypt MD5 - PullRequest
       18

Spring Security Encrypt MD5

16 голосов
/ 30 ноября 2009

У меня есть Java-приложение, использующее Spring Framework и Spring Security для входа в систему. В моей базе данных мои пароли зашифрованы до MD5 перед сохранением. Я добавил в свое application-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>

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

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

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

Ответы [ 3 ]

47 голосов
/ 21 мая 2010

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

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

    assertEquals("a564de63c2d0da68cf47586ee05984d7", hashedPass);
}

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

6 голосов
/ 01 декабря 2009

Как вы создаете свои хэши 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; 
}

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

5 голосов
/ 30 ноября 2009

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

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

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