ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 로그인 암호화, 사용자 비밀번호 암호화하기
    express 2022. 1. 16. 18:32

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

     

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

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

     

    1. bcrypt 모듈 설치


    > npm install bcrypt

     

     

    2. bcrypt모듈 불러오기+암호화 정도 설정


    const bcrypt = require("bcrypt");
    const saltRounds = 10;//이숫자가 높을수록 고도의 암호화

     

     

    3. 비밀번호 암호화하기 bcrypt.hash or bcypt.hashSync 사용


    // hash
    const PW = 'abcd1234'
    bcrypt.hash(PW, 10, (err, encryptedPW) => {
      //callback
    })
    
    // hashSync
    const PW = 'abcd1234';
    const encryptedPW = bcrypt.hashSync(PW, 10); //비밀번호 암호화

    hash적용예제 하단

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

     

     

    4. 비밀번호 검증하기 bcrypt.compare or bcrypt.compareSync 사용


     

    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
    

    비밀번호 검증 실제 적용 예제

     

     

     

     

     

     

     

     

    참고

    https://juni-official.tistory.com/161

    'express' 카테고리의 다른 글

    미들웨어 간단정리  (0) 2022.02.06
    JWT(Jason Web Token)  (0) 2022.01.20
    Cors(Cross Origin Resource Sharing)  (0) 2022.01.19
    HTTP Cookies and Session  (0) 2022.01.17
    express 기초  (0) 2022.01.14
Designed by Tistory.