Spring Security Encrypt MD5

Mam aplikację internetową java używającą spring Framework i spring security do logowania. W mojej bazie danych mam moje hasła zaszyfrowane do MD5 przed zapisaniem. Dodałem w mojej aplikacji-config.xml to kody

 <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>

Początkowo działało, gdy hasło w db nie było zaszyfrowane. Ale kiedy zaszyfrowałem go i dodałem ten fragment w mojej aplikacji config

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

Nie mogę się zalogować.

Author: Martin Thorsen Ranang, 2009-11-30

3 answers

Jak tworzysz HASZE MD5? Coś takiego działa dobrze w Javie:

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; 
}

Kiedy kodujesz "koala", czy dostajesz "a564de63c2d0da68cf47586ee05984d7"?

 6
Author: labratmatt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-01 03:36:20

Zdaję sobie sprawę, że to trochę za późno, ale Spring ma wbudowane klasy, które ułatwiają to.

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

    assertEquals("a564de63c2d0da68cf47586ee05984d7", hashedPass);
}

Jest to test jednostkowy, który napisałem używając wbudowanego w Spring kodu bezpieczeństwa, jest o wiele mniejszy niż Kod MessageDigest i ponieważ używasz już Spring Security, powinieneś mieć już klasy w swojej classpath.

 47
Author: bh5k,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-20 22:09:39

Czytałeś 6.3.3 sekcja haszowanie i uwierzytelnianie z podręcznika Spring Security reference? Wspomniał o niektórych możliwych problemach, które możesz napotkać przy użyciu hashowania haseł.

Niektóre możliwości to wymienione:

  • hash hasła bazy danych może być w Base64, podczas gdy wynik z MD5PasswordEncoder jest w łańcuchach szesnastkowych
  • twój hash hasła może być pisany wielkimi literami, podczas gdy wynik z kodera jest pisany małymi literami
 5
Author: DJ.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-30 18:42:07