카카오 클라우드 스쿨

[node.js] 양방향 암호화 실습

동키드 2022. 11. 16. 20:04

 

양방향 암호화


암호화 할 때 키를 사용해서 암호화하는 방식으로 복호화가 가능
암호화 할 때 사용한 키 와 복호화 할 때 사용한 키가 같아야만 복호화가 가능.
동일한 데이터를 암호화 했을 때 암호화된 결과가 다를 수 도 있음.
이 데이터는 비교 연산을 잘 하지 않고 복원해서 사용하는 경우가 대부분.
일반 데이터 암호화에 이용.


[암호화]
createCipheriv(알고리즘, 키, 초기화벡터): 양방향 암호화 객체 생성
암호화 객체.update(암호화 할 문자열, 문자열 인코딩 방식 - utf8, 출력 인코딩 방식 - base64): 문자열이 리턴됨
암호화 객체.final(출력 인코딩 방식): 암호화가 완료


[복호화]
createDeccipheriv(알고리즘, 키, 초기화 벡터): 양방향 복호화 객체 생성 - 암호화 할 때 사용한 것을 그대로 대입
복호화 객체.update(복호화 할 문자열, 문자열 인코딩 방식 - utf8, 출력 인코딩 방식 - base64): 문자열이 리턴됨
복호화 객체.final(출력 인코딩 방식): 암호화가 완료

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const crypto = require("crypto");
 
const algorithm = "aes-256-cbc";
//알고리즘은 정해진 알고리즘을 이용해야하고,
//노드의 crypto 모듈에서는 key32자리, iv16자리
const key = "12345678901234567890123456789012";
const iv = "1234567890123456";
 
//암호화 객체 생성
 
let cipher = crypto.createCipheriv(algorithm, key, iv);
let result = cipher.update("01011332245""utf8""base64");
result += cipher.final("base64");
//더하기 할당 왜하는거지? 궁금하다.... 낼 물어봐야지
console.log(result);
 
let decipher = crypto.createDecipheriv(algorithm, key, iv);
let result2 = decipher.update(result, "base64""utf8");
result2 += decipher.final("utf8");
// 암호화 할때랑 복호화 할 때 
//인코딩 방식과 출력 인코딩 방식의 위치 바뀐다는 사실 까먹지 말것!
console.log(result2);
 
cs

 

 

-----------------------참고 사이트

https://suite.tistory.com/entry/%EC%95%94%ED%98%B8%ED%99%94-crypyto-%EC%9D%B4%EA%B1%B0-%EC%A0%80%EA%B1%B0-%EC%95%94%ED%98%B8%ED%99%94-%ED%95%99%EC%8A%B5-%EC%9A%A9%EC%96%B4-iv%EB%8C%80%EC%B9%AD%ED%98%95%EA%B3%B5%EA%B0%9C%ED%82%A4desaescbc

 

[ 암호화 ] cipher 학습해 보면 이거 저거 용어 (대칭형,공개키,des,aes,cbc,iv..) 작성중...

http://suite.tistory.com 2013.06 fs 그동안 인코딩 관련해서 base64, urlencode, md5 나 경험하다가 암호화 Algorithm (알고리즘? 알고리듬?) 개발은 아니고 openssl 라이브러리를 사용해보기 위해 학습해 보았다. 구

suite.tistory.com