728x90
반응형
안녕하세요! CodingLog의 우동이입니다.
이번에는 PBKDF2로 비밀번호 암호화하는 방법에 대해 설명하겠습니다.
1. Crypto란?
Nodejs에서 해시 함수를 통한 암호화를 할 수 있도록 해주는 것입니다.
기본으로 내장되어있기 때문에 따로 설치할 필요는 없습니다.
2. 암호화?
- 단방향 암호화 : 복호화할 수 없는 암호화
- 양방향 암호화
- 대칭형 암호화 : key 값이 동일
- 비대칭형 암호화 : key 값이 다름
원래는 복호화라는 것을 사용하지는 않지만
JWT 토큰을 암호화하는 의미에서 해보았습니다.
단방향 암호화는 이전 시간에 해보았는데 확인 한번 해보세요!
https://woosung9801.tistory.com/5
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
반응형
'Nodejs' 카테고리의 다른 글
[Node js]Passport js가 이렇게 쉽다고 ? (3) (0) | 2022.04.13 |
---|---|
[Node js]간단하게 배우는 동기, 비동기의 차이 (0) | 2022.03.02 |
[Node js]Passport js가 이렇게 쉽다고 ? (2) (0) | 2022.02.22 |
[Node js]Passport js가 이렇게 쉽다고 ? (1) (0) | 2022.02.22 |
[Node js]PBKDF2-PASSWORD로 비밀번호 암호화 하기 (0) | 2022.02.05 |
댓글