2013-07-25 2 views
2

를 해시 , 지금 당장 DB에 저장된 암호는 평이합니다. 해시 된 암호로 바꿀 것입니다. 여기서 문제는 이것이다 : 나는이 코드를 로그인 할 때 내가 볼 수보관 내가 보안 로그인 코드를 개편 할 필요가 비밀번호

  • BCrypt.hashpw() 메소드가 다른 해시를 생성합니다.

따라서 이 매번 변경 될 때 해시 된 암호를 저장하는 방법이 궁금 할 것입니다. 내가 생각

아이디어는

  • 사용자가 UI에서 일반 패스워드를 입력한다는 것입니다,이 로그인 방법, 암호가 다음 사용자가 fetchUserByName를 통해 인출됩니다 해시됩니다 (사용자 이름, 해시) 방법; 하지만이 특정 Shiro 및 BCrypt 믹스의 솔루션이 아닌 것 같습니다.

이 문제를 해결하는 올바른 방법은 무엇입니까?

답변

3

hashpw()의 결과 인 해시 된 암호는 해시가 아닙니다. 또한 평문으로 전달한 무작위로 생성 된 소금도 들어 있습니다.

BCrypt.checkpw(password, storedHash)은 저장된 해시를 검사하는 올바른 방법입니다. 메서드는 해시 된 암호에서 해시를 검색하고, 일반 텍스트 암호를 해시하고, 결과를 storedHash의 실제 해시 부분과 비교합니다.

here 라이브러리 사용 방법에 대한 자세한 설명을 찾을 수 있습니다.

public User login(String username, String password) { 
    User user = userDAO.fetchUserByName(username); 
    if (!BCrypt.checkpw(password, user.getHash()) 
     throw new AuthenticationException("Failure in authentication"); 
    return user; 
} 
:

귀하의 경우

는,이 같은 방법 뭔가를 써서

3

BCrypt.hashpw 메서드는 여러 반복에 대해 동일한 암호 해시를 반환하지 않습니다.

BCrypt 클래스의 checkpw 메소드를 사용하여 다른 해시 비밀번호 (새로 생성 된 비밀번호와 데이터베이스에서 생성 된 비밀번호)를 비교해야합니다.

메서드에서 BCrypt.gensalt()가 올바르게 사용되었습니다. 사용자 이름만을 기반으로 사용자 정보를 검색하고 checkpw 메소드를 사용하여 해시 된 암호를 비교하십시오.

도움이되기를 바랍니다.

관련 문제