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
블로그 이미지

Link2Me

,