로그인 기능을 구현하다 보니 암호화 복호화 기능을 사용하게 되었다.
기존에는 기본적으로 제공하는 crypto 모듈을 사용했던 기억이 있는데
검색해보니 crypto-js 라는 npm package 가 있었고 description 을 보니 상당히 간단해 보였기에 사용해보았다.
npm install crypto-js
#ts
npm install crypto-js
npm install --save-dev @types/crypto-js
import CryptoJS from "crypto-js";
export const encrypt = (payload: string) => {
try {
const secret_key = process.env.CRYPTO_SECRET_KEY;
if (!secret_key) {
console.log("No Secret Key.");
return null;
}
const encrypted = CryptoJS.AES.encrypt(payload, secret_key).toString();
return encrypted;
} catch (e) {
console.log("Encryption error occur : ", e);
return null;
}
};
export const decrypt = (encrypted: string) => {
try {
const secret_key = process.env.CRYPTO_SECRET_KEY;
if (!secret_key) {
console.log("No Secret Key.");
return null;
}
const decrypted_bytes = CryptoJS.AES.decrypt(encrypted, secret_key);
const decrypted = decrypted_bytes.toString(CryptoJS.enc.Utf8);
return decrypted;
} catch (e) {
console.log("Decryption error occur : ", e);
return null;
}
};
두가지 기능 encrypt 와 decrypt 기능이다.
암호화, 복호화 하는 부분은
이렇게 두 부분이다.
알고리즘으로는 AES 를 사용하였고, 암호화로 두가지 인자
이렇게 두가지가 필요하다.
암호키의 경우 무작위로 생성된 키를 사용했다.
무작위로 생성된 키는 https://randomkeygen.com/ 과 같은 사이트에서 쉽게 얻을 수 있다.
복호화는
이렇게 두가지가 필요한데,
복호화 시 encoding 되어 나오므로 상기와 같이 decoding 과정이 필요하다.
References
crypto-js는 이제 node의 native module인 crypto를 wrapping해서 사용하고 있습니다~