0
나는이 질문에 스프링 보안을 사용하지만 지식은이 질문에 대답 할 필요가 없을 수도있다.블로우 피쉬 패스워드 확인
스프링 보안의 복어 암호화 클래스 (BCrypt
)가 주어진 비밀번호를 어떻게 검증하는지 이해하려고합니다.
- 가
BCrypt.hashpw(clearText, salt)
으로이 소금을 사용BCrypt.gensalt(10);
- 인코딩과 암호를 염을 생성 : 나는에 노력했다.
잘 돌아갔습니다. 그런 다음 사용자가 암호를 입력 할 때 재사용 할 수 있도록 데이터베이스에 사용 된 소금을 저장하려고했습니다.
암호를 확인할 때 BCryptPasswordEncoder
이 소금을 사용하지 않는다는 것을 깨달았습니다.
public static void main(String[] args) {
String salt = BCrypt.gensalt(12);
String clearText="test";
String hashed = BCrypt.hashpw(clearText, salt);
String reHashed = BCrypt.hashpw(clearText, hashed);
System.out.println("salt : " + salt);
System.out.println(hashed);
System.out.println(reHashed);
}
출력 :
salt : $2a$12$gzUymsNBoW.f1OfkLpb2se
$2a$12$gzUymsNBoW.f1OfkLpb2seFZrniorawujSOp6Qe.PWDIHJvmYSP6y
$2a$12$gzUymsNBoW.f1OfkLpb2seFZrniorawujSOp6Qe.PWDIHJvmYSP6y
이 확인 보인다
public boolean matches(CharSequence rawPassword, String encodedPassword) {
[...]
return BCrypt.checkpw(rawPassword.toString(), encodedPassword);
}
그래서 나는이 코드 조각을 시도 : 대신, 소금 등의 해시 된 암호를 사용하여 암호를 지하실 그 :
good password => hashed = hash(clearPassword, hashed)
잘못 이해하고 있습니까? 소금이 암호 확인에 쓸모가 없다는 뜻입니까? 따라서 데이터베이스에 소금을 저장할 필요가 없다는 뜻입니까?
답변 해 주셔서 감사합니다. BCrypt 구현과 관련된 '해쉬 된 (hashed)'과 '재 해쉬 (reHashed)'간의 동등성은 있습니까? –