비밀번호는 개인의 정보와 밀접한 관련이 있기 때문에 노출되지 않도록 엄격한 주의가 필요하다. (대부분의 유저가 아이디와 비밀번호를 같게 쓰는 경우가 많아 한곳에서 노출되면 여러 곳에서 노출되는 것과 같다) 이 밖에 비밀번호 암호화가 필요한 이유에 대해 정리해보면 다음과 같다.
단방향 해쉬함수(one-way hash function) : 한번 암호화 된 정보는 되돌릴 수 없다. ex) MD5, SHA
Bcrypt : 비밀번호를 위해 만들어진, 단방향 해쉬함수의 취약점을 보안한 암호화 방법
BCryptPasswordEncoder는 Spring Security 프레임워크에서 제공하는 클래스로 비밀번호를 암호화(해시)하는 데에 사용한다.
BCryptPasswordEncoder에서 제공하는 메소드
dto.setPassword(passwordEncoder.encode(dto.getPassword()));
사용자로 부터 입력받은 password를 인코딩한다. 해시시킬 때 무작위로 생성한 salt가 포함되므로 같은 비밀번호를 인코딩해도 매번 다른 결과값이 반환된다.
if(!passwordEncoder.matches(req.getPassword(),account.getPassword())){
throw new CustomException(CustomExceptionStatus.FAILED_TO_LOGIN);
}
제출된 인코딩 되지 않은 암호와 저장소에 있는 인코딩된 암호가 일치하는지 확인한다. 비밀번호가 일치하면 true를 반환하고 일치하지 않으면 false를 반환한다.