티스토리 뷰

개발(Dev)/(02) 서버 개발

(Java) bCript 암호화

낭만 고양이 2019. 8. 1. 11:57

-----------------------------------------------------------------------------------------------------------------------------------

- 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
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함