Bcrypt를 이용해 password 암호화하는 법
Bcrypt란 강력한 암호 해시 함수로 비밀번호 저장과 관련된 보안에 사용하는 라이브러리
주요 기능으로 Key Stretching, Salt가 있음
*key stretchinng이란 만들어진 해시 값을 반복 연산하여 브루트포스 공격을 어렵게 만드는 방법
*Salt란 암호화 하는 값에 추가 입력으로 사용되는 랜덤 데이터
주요 메서드
gensalt() | 솔트값 생성 함수 |
hashpw(비밀번호, 솔트값) | 비밀번호 해시화 함수 |
checkpw(비밀번호, 해시화된 비밀번호) | 비밀번호 검증 함 |
kdf(비밀번호, 솔트값, 도출할 키의 길이, 해시 계산 반복횟수) | 비밀번호 바탕의 안전한 암호화 키를 도출 |
이용예시
PasswordBcrypt
import org.mindrot.jbcrypt.BCrypt;
public class PasswordBcrypt{
//비밀번호 암호화
public String encrypt(String password) {
return BCrypt.hashpw(password,BCrypt.gensalt());
}
//비밀번호와 암호화된 비밀번호가 서로 맞는지 확인
public Boolean isMatch(String password, String hashPassword) {
return BCrypt.checkpw(password,hashPassword);
}
}
UserController
public void createUser(UserCreateRequestDto userCreateRequestDto) {
//생략
//전달 받은 비밀번호 암호화
String hashPassword= encryptHelper.encrypt(userCreateRequestDto.getPassword());
User user =new User(userCreateRequestDto.getUserId(),
hashPassword,
userCreateRequestDto.getEmail());
//생략
}