BCryptPasswordEncoder로 인코딩시 매번 결과 값이 다른 부분에서 생기는 문제입니다.

4,891 views
Skip to first unread message

박형철

unread,
Oct 12, 2015, 1:35:57 AM10/12/15
to Korea Spring User Group Q&A
참고 1 : http://www.mkyong.com/spring-security/spring-security-password-hashing-example/

BCryptPasswordEncoder로 인코딩시 매번 결과 값이 다른데 과거에 입력한 비밀번호와 지금 기입한 비밀번호가 같은 지 어떻게 알 수 있나요?
마이페이지를 개발 중인데 현재 비밀번호와 동일해야 정보 수정이 가능하도록 하는 부분에서 막혀있습니다. 부디 조언 부탁드립니다.

이수홍

unread,
Oct 12, 2015, 1:42:06 AM10/12/15
to ks...@googlegroups.com
boolean isPasswordValid(String encPass, String rawPass, Object salt);
PasswordEncoder 인터페이스에 보면 체크 할 수 있는 위의 메소드가 있습니다.

equals 형태로 체크할 수 없습니다.


2015. 10. 12., 오후 2:35, 박형철 <keas...@gmail.com> 작성:

--
이 메일은 Google 그룹스 'Korea Spring User Group Q&A' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 ksug+uns...@googlegroups.com에 이메일을 보내세요.
http://groups.google.com/group/ksug에서 이 그룹을 방문하세요.
웹에서 이 토론을 보려면 https://groups.google.com/d/msgid/ksug/7e3dffff-e462-4722-bcfa-435d535b2f6a%40googlegroups.com을(를) 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.

김지헌

unread,
Oct 12, 2015, 1:48:37 AM10/12/15
to ks...@googlegroups.com

http://docs.spring.io/autorepo/docs/spring-security/3.2.0.RELEASE/apidocs/org/springframework/security/crypto/bcrypt/BCryptPasswordEncoder.html

위 문서를 보시면, PasswordEncoder에 있는 matches(CharSequence rawPassword, String encodedPassword)가 있습니다.
이 메서드를 이용하시면 됩니다. @_@)

public class PasswordEncoderTest {
 
    @Autowired
    private PasswordEncoder passwordEncoder;
 
    @Test
    public void test() {
        String rawPassword = "password";
        String encodedPassword = passwordEncoder.encode(rawPassword);
        assertThat(passwordEncoder.matches(rawPassword, encodedPassword), is(true));
    }
}

이렇게 해보세용.

화면에서 넘겨받은 비밀번호(inputPassword)를 암호화되어 저장된 비빌번호를 불러내어 비교하시면 됩니다.


2015년 10월 12일 오후 2:42, 이수홍 <sbc...@gmail.com>님이 작성:
웹에서 이 토론을 보려면 https://groups.google.com/d/msgid/ksug/DA51DBE8-920C-4E1F-B859-08B279F9AC1B%40gmail.com을(를) 방문하세요.

더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.



--
이름 : 김지헌
별명 : 허니몬
블로그 : http://ihoney.pe.kr / http://java.ihoney.pe.kr
트위터 : @ihoneymon
이메일 : ihon...@gmail.com

이수홍

unread,
Oct 12, 2015, 1:53:27 AM10/12/15
to ks...@googlegroups.com
앗 제가 API가 헷갈렸네요. 
지헌님 답변이 맞습니다.


2015. 10. 12., 오후 2:48, 김지헌 <ihon...@gmail.com> 작성:

Tyler Lim

unread,
Oct 12, 2015, 1:57:55 AM10/12/15
to ks...@googlegroups.com
Bcrypt 의 경우 내부적으로 임의의 salt를 이용하여 다이제스트(암호문)를 구성하기 때문에 매번 다른 값이 나오는 것이 정상적인 상황입니다. 

그렇기 때문에 해시값만으로 동일 여부 확인은 어려우며 아래 피드백 주신  public boolean matches(CharSequence rawPassword, String encodedPassword)를 사용하시거나 BCrypt.checkpw(String plaintext, String hashed) 를 첨조하시기를 추천 드립니다.



2015. 10. 12., 오후 2:35, 박형철 <keas...@gmail.com> 작성:

박형철

unread,
Oct 12, 2015, 2:53:17 AM10/12/15
to Korea Spring User Group Q&A
답변 주신 모든 분들에게 감사합니다. 큰 도움이 되었습니다.
Reply all
Reply to author
Forward
0 new messages