2009-11-30 2 views
15

로그인을 위해 스프링 프레임 워크와 스프링 보안을 사용하는 자바 웹 애플리케이션이 있습니다. 내 데이터베이스에 저장하기 전에 암호를 MD5로 암호화했습니다. 내 application-config.xml에이 코드를 추가했습니다.스프링 보안 MD5를 암호화하십시오.

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

로그인 할 수 없습니다.

+7

md5는 해시 함수이며 암호화 방법이 아닙니다. – u0b34a0f6ae

+1

무엇을 의미합니까? 무엇을해야합니까 – cedric

답변

6

MD5 해시를 어떻게 만듭니 까? 물론 자바에서 다음 작품으로 뭔가 :

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"을받을 수 있나요 인코딩

?

+0

아 .. 내가 messageDigest.digest()에서 16을 놓쳤습니다. toString (16). 덕분에 – cedric

+0

실제로 31 개 미만의 기호가있을 수 있습니다. 그래서. 일부 상황에서는 작동하지 않습니다 (매우 드문 경우). 32 기호가없는 한 "0"을 추가해야합니다. –

4

스프링 보안 참조 설명서의 6.3.3 Hashing and Authentication 섹션을 읽으셨습니까? 암호 해싱을 사용할 때 발생할 수있는 몇 가지 문제에 대해 언급했습니다.

어떤 가능성이 나열된

  • 데이터베이스 암호 해시를 Base64에있을 수 있습니다, MD5PasswordEncoder의 결과 16 진수 문자열에있는 동안
  • 암호 해시는 대문자에있을 수도의 결과 동안 인코더가 소문자 문자열입니다
47

나는 이것이 조금 늦다는 것을 알고 있지만, Spring은 이것을 쉽게 만들어주는 내장 클래스를 가지고있다.

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

    assertEquals("a564de63c2d0da68cf47586ee05984d7", hashedPass); 
} 

내가 봄 보안 코드를 내장하여 쓴 단위 테스트, 그것은이 MessageDigest 등 코드보다 훨씬 작으며 이미 봄 보안을 사용하고 있기 때문에, 당신은 이미 당신의 클래스 경로의 클래스를 가져야한다 .

+2

이것은 가장 좋은 대답입니다. 깨끗하고 쉽게 봄. –

+1

Spring 애플리케이션에서 깔끔하게 사용하는 방법에 대한 자세한 내용은 [다른 답변] (http://stackoverflow.com/questions/7378107/hashing-and-salting-passwords-with-spring-security-3)을 참조하십시오. . – chrisjleu