728x90
Node.js 에서 암호화/복호화하는 예제를 구현 테스트하고 적어둔다.
같은 언어에서 암호화하고 복호화하는 것은 전혀 문제가 없었다.
이기종 언어에서 테스트를 하니까 안되어서 원인 찾느라고 개고생을 했다.
원인은 const iv = Buffer.alloc(16,0); 로 해주는 것을 찾아내는 것이 문제였다.
아래 코드로 REST API 에서 AES256 암호화한 값을 제대로 전달하고, 복호화하는데도 문제가 없다는 걸 확인했다.
모듈 설치
npm install crypto --save
모듈을 불러와서 사용하는 방법으로 코드를 구현했다.
파일명 : aes_crypto.js
const crypto = require('crypto'); // 암호화 모듈 선언
// 암호화 AES256
function AES_encrypt(data, key) {
const iv = Buffer.alloc(16,0); // 16비트
const cipher = crypto.createCipheriv('aes-256-cbc', key, iv);
let encryptedText = cipher.update(data, 'utf8', 'base64');
encryptedText += cipher.final('base64');
return encryptedText;
}
// 복호화 AES256
function AES_decrypt(data, key) {
const iv = Buffer.alloc(16,0); // 16비트
const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);
let decryptedText = decipher.update(data, 'base64', 'utf8');
decryptedText += decipher.final('utf8');
return decryptedText;
}
module.exports = { AES_encrypt, AES_decrypt}
// Require()함수는 module.exports를 리턴한다.
|
사용 예제
key 를 함수에 포함할까 하다가 별도로 호출하는 방법을 택했다.
key 길이는 반드시 32비트 이어야 한다. 아래 key는 임의로 생성한 키다.
AES 암호화/복호화 함수가 포함된 파일을 require 로 호출하고 aes 로 변수에 할당했다.
// crypto_test.js
const aes = require('./aes_crypto');
// 암복호화 KEY
const key = 'Qsj23missdaxX2BjyskV6bs#adada6ds'; // 32비트
// 암복호화 테스트
let plainText = '내 이름은 홍길동';
let encryptedText = aes.AES_encrypt(plainText, key);
let decryptedText = aes.AES_decrypt(encryptedText, key);
console.log('텍스트 : ', plainText);
console.log('암호화 : ', encryptedText);
console.log('복호화 : ', decryptedText);
|
728x90
'node.js' 카테고리의 다른 글
Node.js nunjucks 기반 Layout (0) | 2022.11.19 |
---|---|
sqlMessage: "Access denied for user ''@'localhost' (using password: NO)" (0) | 2022.11.19 |
[Node.js] ejs View, nunjucks View (0) | 2022.11.18 |
Node.js jQuery 설치 및 사용 (0) | 2022.08.12 |
nodeJS 유틸리티 상속 (0) | 2022.06.09 |