nodejs - bcrypt

 

 

Node.js - Bcrypt 사용하기


Bcrypt는 레인보우 테이블 공격 방지를 위해 솔트(Salt)를 통합한 적응형 함수 중 하나라고 한다. SHA 종류의 암호화는 GPU 연산에 유리한 32비트 논리 및 연산만 사용하기 때문에 GPU 연산을 이용한 공격에 취약하다고 한다. 그래서 Bcrypt 설계자는 Blowfish를 이용해 구현했다고 함.

 

레인보우 테이블 : 해시 함수를 사용하여 변환 가능한 모든 해시 값을 저장시켜 놓은 표

솔트 : 데이터, 비밀번호, 통과암호를 해시 처리하는 단방향 함수의 추가 입력으로 사용되는 랜덤 데이터

 

 

1. bcrypt 모듈 설치


> npm install bcrypt

 

2. bcrypt모듈 불러오기


const bcrypt = require('bcrypt');

 

3. 비밀번호 암호화하기


// hash
const PW = 'abcd1234'
bcrypt.hash(PW, 10, (err, encryptedPW) => {
  //callback
})

// hashSync
const PW = 'abcd1234';
const encryptedPW = bcrypt.hashSync(PW, 10); //비밀번호 암호화

 

hash는 동기, hashSync는 비동기 방식 파라미터로 넣은 숫자 10은 암호화에 사용되는 Salt로, 값이 높을수록 암호화 연산이 증가. 하지만 암호화하는데 속도가 느려짐.

 

 

4. 비밀번호 검증하기


const PW = 'abcd1234';
const encryptedPW = bcrypt.hashSync(PW, 10);

bcrypt.compare(PW , encryptedPW, (err, same) => {
  console.log(same);  //=> true
})

//------------------------------------------------

const PW = 'abcd1234';
const encryptedPW = bcrypt.hashSync(PW, 10);

const same = bcrypt.compareSync(PW, encryptedPW);
console.log(same); // same = true

 

salt 값을 20으로 했더니 연산을 멈출 생각을 안하더라구요.. 회원 비밀번호의 경우 암호화하여 DB에 저장합니다. 회원이 로그인할 때 입력한 비밀번호는 compare를 통하여 검증한 후 로그인을 성공시키면 끝.

 

bcrypt db
bcrypt로 저장한 password