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ć.
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"?
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.
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
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