본문 바로가기
Nodejs

[Node js]Crypto로 양방향 암호화 및 복호화 하기

by ★☁︎♣︎♥︎ 2022. 4. 14.
728x90
반응형
안녕하세요! CodingLog의 우동이입니다.
이번에는 PBKDF2로 비밀번호 암호화하는 방법에 대해 설명하겠습니다.

1. Crypto란?

Nodejs에서 해시 함수를 통한 암호화를 할 수 있도록 해주는 것입니다.

기본으로 내장되어있기 때문에 따로 설치할 필요는 없습니다.

 

2. 암호화?

  • 단방향 암호화 : 복호화할 수 없는 암호화
  • 양방향 암호화 
    • 대칭형 암호화 : key 값이 동일
    • 비대칭형 암호화 : key 값이 다름

원래는 복호화라는 것을 사용하지는 않지만

JWT 토큰을 암호화하는 의미에서 해보았습니다.

 

단방향 암호화는 이전 시간에 해보았는데 확인 한번 해보세요!

https://woosung9801.tistory.com/5

 

[Node js]PBKDF2-PASSWORD로 비밀번호 암호화 하기

안녕하세요! CodingLog의 우동이입니다. 이번에는 PBKDF2로 비밀번호 암호화하는 방법에 대해 설명하겠습니다. 1. PBKDF2란? pbkdf2는 해쉬 컨테이너 알고리즘입니다. NIST(National Institute of Standards and T..

woosung9801.tistory.com

3. 사용방법

JWT토큰은 사용자 정보를 모두 가지고 있기에

사용자 DB에 있는 salt값이나, CRYPTO_KEY를. env에 넣어서 사용하면 됩니다!!

 

저는 사용자 salt값으로 해보았습니다.

우선 프로젝트의 middlewares에 crypto.js를 만들겠습니다.

crypto.js

const crypto = require('crypto');

// const key = process.env.CRYPTO_KEY // 대칭형 키

// 양뱡한
// 암호화 & 복호화

// 암호화 메서드
const cipher = (password, key) => {
    return new Promise((resolve, reject) => {
        const encrypt = crypto.createCipher('des', key) // des알고리즘과 키를 설정
        const encryptResult = encrypt.update(password, 'utf8', 'base64') // 암호화
            + encrypt.final('base64') // 인코딩
        resolve(encryptResult)
    })
}

// 복호화 메서드
const decipher = (password, key) => {
    return new Promise((resolve, reject) => {
        const decode = crypto.createDecipher('des', key)
        const decodeResult = decode.update(password, 'base64', 'utf8') // 암호화된 문자열, 암호화 했던 인코딩 종류, 복호화 할 인코딩 종류 설정
            + decode.final('utf8') // 복호화 결과의 인코딩
            
        resolve(decodeResult)
    })
}
module.exports = {
    cipher,
    decipher
}

위에 코드처럼 사용하였는데 이 미들웨어는

JWT 토큰을 암호화하고 복호화하는 코드입니다.

 

이상으로 crypto.js를 사용하는 방법을 배워봤는데

참고로 양방향 암호화는 거의 사용 안 하지만 토큰을 암호화하면 좋을 것 같아서 실습해봤습니다.!!

고생하셨습니다.

728x90
반응형

댓글