포스트

Node.js에서 AES-128-CTR 복호화 문제 해결하기

개요

여러분이 Node.js에서 crypto 라이브러리를 사용하여 AES-128-CTR 암호화와 복호화를 수행하다가 문제에 부딪혔다면, 이 글은 그 해결책을 제시합니다. 특히, 복호화 과정에서 빈 문자열이 출력되는 문제, 즉 ‘empty string output’ 오류에 대해 다룹니다.

문제의 원인: ‘empty string output’

이 문제가 발생하는 주된 원인은 초기화 벡터(Initialization Vector, IV)나 암호 키의 불일치입니다. 초기화 벡터와 암호 키는 암호화와 복호화 과정에서 동일해야 합니다. 그렇지 않으면 복호화된 문자열은 예상과 다르게 출력될 것입니다.

해결 방법 1: 초기화 벡터와 암호 키 일치시키기

코드 예시를 통해 설명하겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const crypto = require('crypto');
const algorithm = 'aes-128-ctr';
const key = 'your-secret-key-here';
const iv = crypto.randomBytes(16);

// 암호화
const cipher = crypto.createCipheriv(algorithm, key, iv);
let encrypted = cipher.update('your-text-here', 'utf8', 'hex');
encrypted += cipher.final('hex');

// 복호화
const decipher = crypto.createDecipheriv(algorithm, key, iv);
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
decrypted += decipher.final('utf8');

암호화와 복호화 과정에서 동일한 keyiv를 사용했는지 확인하세요.

해결 방법 2: 오류 처리 추가하기

복호화 과정에서 문제가 발생할 경우, 에러를 출력할 수 있도록 코드를 수정하세요.

1
2
3
4
5
6
7
try {
    const decipher = crypto.createDecipheriv(algorithm, key, iv);
    let decrypted = decipher.update(encrypted, 'hex', 'utf8');
    decrypted += decipher.final('utf8');
} catch (error) {
    console.error(`Decryption failed: ${error}`);
}

이렇게 하면 오류가 발생했을 때 쉽게 파악할 수 있습니다.

결론

Node.js에서 crypto 라이브러리를 이용할 때 ‘empty string output’ 오류는 주로 초기화 벡터나 암호 키의 불일치 때문에 발생합니다. 이를 해결하기 위해서는 두 가지 방법이 있습니다: 1) 초기화 벡터와 암호 키를 일치시키는 것, 2) 오류 처리를 추가하여 문제를 쉽게 파악하는 것입니다. 이 두 가지 방법을 사용하면 복호화 과정에서의 문제를 효과적으로 해결할 수 있습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.