티스토리 뷰

program

crypto 모듈 / 양방향 암호화

littlecarbb 2024. 3. 7. 13:58

출처 : https://blog.naver.com/PostView.naver?blogId=01075970528&logNo=222484380977

 

DB에 정보를 암호화해서 저장해야 한다.

node js 암호화 모듈 중에서 유명한 crypto 모듈을 사용하기로 결정!

암호화해서 insert한 후에 조회할 때는 select 후에 복호화가 필요하니까

양방향 암호화 라고 할 수 있음

먼저 npm으로 모듈 설치-

 

npm i -d crypto

그리고 소스 상단쪽에 require 해주시고

 

const crypto = require('crypto');

crypto 모듈을 사용하려면 알고리즘을 선택해야하는데

md5나 sha1은 뚫렸다고 함..(!)

내가 선택한 알고리즘은 aes-256-cbc

왜냐면 아래 블로그에서 고오급 암호화 알고리즘이라고 봐서...ㅎㅎ

>> AES는 Advanced Encryption Standard 고오급 암호화 표준이다.

암호화 및 복호화에 동일한 키를 사용하는 대칭키 알고리즘이다.

종류로는 AES-128, AES-192, AES-256 이 있는데

각 뒤에 붙은 숫자가 키의 길이를 의미한다.

ex) AES-256 => 키가 256bit(=32byte)

AES 의 암/복호화는 다음과 같은 과정으로 이루어진다.

암호화

plain text > plain bytes > encrypt > encrypted bytes > encrypted base64 text

복호화

encrpyted base64 text > encrypted bytes > decrypt > plain bytes > plain text

그리고 암호화 소스

const algorithm = 'aes-256-cbc';
let text = 'Hello World!'; // 암호화 할 문구
const key = crypto.scryptSync('wolfootjaIsSpecial','specialSalt', 32); // 나만의 암호화키. password, salt, byte 순인데 password와 salt는 본인이 원하는 문구로~ 
const iv = crypto.randomBytes(16); //초기화 벡터. 더 강력한 암호화를 위해 사용. 랜덤값이 좋음

const cipher = crypto.createCipheriv(algorithm, key, iv); //key는 32바이트, iv는 16바이트
let result = cipher.update(text, 'utf8', 'base64');
result += cipher.final('base64');
console.log('암호화: ', result);

그러면 결과는 아래와 같이 나온당~

암호화: 5+0OhgJcCSRj84Xxg0J0xQ==

이제 복호화 해보자~

const deciper = crypto.createDecipheriv(algorithm, key, iv);
let result2 = deciper.update(result, 'base64', 'utf8');
result2 += deciper.final('utf8');
console.log('복호화: ', result2);

그러면 결과는

복호화: Hello World!

자 이제 암호화해서 저장하러 가보쟈~

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함