2017-04-20 39 views
1

학교 운동을하는 동안 bcrypt를 사용하여 암호를 올바르게 저장해야합니다 (데이터베이스에 해시 됨). 메소드를 비교할 때 메소드는 항상 false를 리턴합니다. 내 코드는 다음과 같습니다해시 된 암호와 salt (bcrypt)를 비교하면 항상 false가 반환됩니다.

등록 :

String username = editTextUsername.getText().toString(); 
String password = editTextPassword.getText().toString(); 
String hashedPW = BCrypt.hashpw(password, BCrypt.gensalt()); 
User user = new User(username, hashedPW); 
user.save(); 

로그인 :

String username = editTextUsername.getText().toString(); 
String enteredPassword = editTextPassword.getText().toString(); 

String hashedPW = BCrypt.hashpw(enteredPassword, BCrypt.gensalt()); 

User u = usercontroller.getUser(username); //gets user object 
String password = u.getPassword; 

BCrypt.checkpw(password, hashedPW); //always returns false 

나는 아마도 나를 도울 수있는 그곳에 BCrypt 전문가가되기를 바랍니다. 미리 감사드립니다.

+0

UI의 첫 번째 인수와 저장소 (해시 된 값)의 두 번째 인수로 일반 텍스트 암호를 전달해야합니다 .. – dvsakgec

+0

찾고있는 BCrypt 전문가가 아니지만 상상할 수 있습니다. BCrypt.gensalt()는 호출 할 때마다 다른 난수를 반환합니다. 그러므로 gensalt가 다른 경우 결과가 다르기 때문에 해시가 다르다고 생각합니다. – 0xDEADC0DE

답변

2

CHAGE

BCrypt.checkpw(password, hashedPW); 

BCrypt.checkpw(enteredPassword, password); 

에 다음 제대로 평가합니다. 암호에 소금이 추가되고 해시가 생성 되더라도 상관 없습니다. 다른 암호가있는 동일한 암호의 해시는 암호가 생성 된 암호와 비교할 때 true로 평가되어야합니다. 해싱은 편도 알고리즘입니다. 우리는 해시 알고리즘을 사용하여 암호 해시를 비교할 수있는 해시를 갖는 암호를 다시 계산할 수 없습니다. 해싱은 암호를 안전하게 저장하는 데 사용됩니다