티스토리 뷰
-----------------------------------------------------------------------------------------------------------------------------------
- bcrypt는 패스워드 저장을 목적으로 설계된 암호화 Open Source이다. (단방향 암호화)
- Niels Provos와 David Mazières가 1999년 발표했고, 현재까지 사용되는 가장 강력한 해시 메커니즘 중 하나이다.
- bcrypt는 OpenBSD에서 기본 암호 인증 메커니즘으로 사용되고 있다.
- 미래에 PBKDF2보다 더 경쟁력이 있다고 여겨진다.
- bcrypt에서 “work factor” 인자는 하나의 해시 다이제스트를 생성하는 데 얼마만큼의 처리 과정을 수행할지 결정한다.
- “work factor”를 조정하는 것만으로 간단하게 시스템의 보안성을 높일 수 있다.
- bcrypt는 PBKDF2나 scrypt와는 달리, 입력 값 72 bytes character 제약이 있다.
- Java 소스
import org.springframework.security.crypto.bcrypt.BCrypt;
...
...
/** 암호화 **/
// 클라이언트으로부터 입력받은 사용자의 비밀번호 (평문)
String inputPwd = "password1234";
// BCrypt 알고리즘 해쉬 생성, 60바이트의 문자열
String outPutPwdHashed = BCrypt.hashpw(inputPwd , BCrypt.gensalt());
// 위와 동일, 단 인자 숫자가 커질수록 보안은 우수해진다. 단 해쉬를 생성하고 검증하는 시간은 느려짐(속도..)
String outPutPwdHashed = BCrypt.hashpw(inputPwd , BCrypt.gensalt(10));
...
...
/** 비밀번호 비교 (단방향 암호 - 복호화 불가) **/
// 클라이언트으로부터 입력받은 사용자의 비밀번호 (평문)
String inputPwd = "password1234";
String inputPwdHashed = ... // 암호화되어 있는 비밀번호
// 입력된 평문 암호와 해쉬화된 암호 검증 (보통 DB에 저장되어 있는 암호화된 값을 가져와 비교)
boolean isValidPassword = BCrypt.checkpw(inputPwd , inputPwdHashed);
- Maven Dependency
<!-- Spring Security에 포함된 라이브러 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<!-- Spring Security를 사용하지 않는다면 아래의 Dependency 사용 -->
<dependency>
<groupId>org.mindrot</groupId>
<artifactId>jbcrypt</artifactId>
<version>0.3m</version>
</dependency>
- 관련 사이트
-----------------------------------------------------------------------------------------------------------------------------------
'개발(Dev) > (02) 서버 개발' 카테고리의 다른 글
(JAVA) ObjectMapper 데이터 변환 (0) | 2020.06.02 |
---|---|
(JAVA) java.util.stream 기능 (0) | 2020.06.02 |
(Java) SFTP Client (0) | 2019.08.01 |
(Java) FTP Client (0) | 2019.08.01 |