Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

Node.js Decipher.final() 메서드 완벽 가이드 – 문법부터 예제까지

Node.js Decipher.final() 메서드란?

decipher.final()은 복호화(decipher) 객체의 값을 담은 버퍼(Buffer) 또는 문자열을 반환하는 Node.js 내장 메서드입니다. 이 메서드는 crypto 모듈에서 제공되며, update()로 처리된 나머지 데이터를 마무리하는 역할을 합니다.

주의: final()이 호출된 이후에는 해당 decipher 객체로 더 이상 데이터를 복호화할 수 없으며, 두 번 이상 호출하면 에러가 발생합니다. 따라서 반드시 복호화 작업의 마지막에 한 번만 호출해야 합니다.

반환값

outputEncoding이 지정되면 문자열을 반환하고, 생략하면 Buffer 객체를 반환합니다.

문법

decipher.final([outputEncoding])

매개변수

  • outputEncoding – 출력 인코딩 방식을 지정하는 선택적 매개변수입니다. 문자열 타입이며 hex, base64, utf8 등의 값을 사용할 수 있습니다.

예제 1: 기본적인 복호화

아래 코드를 decipherFinal.js라는 이름의 파일로 저장한 뒤, 다음 명령어로 실행해 보세요.

node decipherFinal.js

decipherFinal.js

// cipher.final() 메서드 사용 예시

// crypto 모듈 가져오기
const crypto = require('crypto');

// AES 알고리즘 초기화
const algorithm = 'aes-192-cbc';
// 키 생성에 사용할 비밀번호 설정
const password = '12345678123456789';

// decipher 객체용 키 생성
const key = crypto.scryptSync(password, 'old data', 24);

// 고정 IV(초기화 벡터) 설정
const iv = Buffer.alloc(16, 0);

const decipher = crypto.createDecipheriv(algorithm, key, iv);

// 복호화할 암호문(hex 인코딩)
const encrypted1 =
'a05e87569f3f04234812ae997da5684944c32b8776fae676b4abe9074b31cd2a';

let decryptedValue1 = decipher.update(encrypted1, 'hex', 'utf8');

decryptedValue1 += decipher.final('utf8');

// 결과 출력
console.log('Decrypted value -- ' + decryptedValue1);

실행 결과

C:\home\node>> node decipherFinal.js
Decrypted value -- Welcome to tutorials point

위 예제에서는 update()로 대부분의 데이터를 복호화한 뒤, final('utf8')을 호출해 남은 데이터까지 모두 처리하고 그 결과를 하나의 문자열로 연결했습니다.

예제 2: 버퍼 배열 활용

이번에는 복호화된 데이터를 배열에 담아 처리하는 또 다른 방식의 예제를 살펴보겠습니다.

// cipher.final() 메서드 사용 예시

// crypto 모듈 가져오기
const crypto = require('crypto');

// AES 알고리즘 초기화
const algorithm = 'aes-192-cbc';
// 키 생성에 사용할 비밀번호 설정
const password = '12345678123456789';

// decipher 객체용 키 생성
const key = crypto.scryptSync(password, 'old data', 24);

// 고정 IV(초기화 벡터) 설정
const iv = Buffer.alloc(16, 0);

const decipher = crypto.createDecipheriv(algorithm, key, iv);

// 복호화할 암호문(hex 인코딩)
const encrypted =
'a05e87569f3f04234812ae997da5684944c32b8776fae676b4abe9074b31cd2a';

var buf = [];

// 복호화 진행
let decrypted = decipher.update(encrypted, 'hex', 'utf8');

// 복호화된 데이터를 버퍼 배열에 추가
buf.push(decrypted);
buf.push(decipher.final('utf8'));

// 결과 출력
console.log(buf.join(' '));

실행 결과

C:\home\node>> node decipherFinal.js
Welcome to tutor ials point

두 번째 예제에서는 buf.join(' ')이 배열 요소 사이에 공백을 삽입하기 때문에 'tutor'와 'ials' 사이에 공백이 추가되어 출력됩니다. 이는 final()update()에서 처리하지 못한 나머지 블록을 반환한다는 사실을 잘 보여줍니다.

정리

decipher.final()은 복호화 과정을 마무리하는 필수 메서드로, 반드시 한 번만 호출해야 하며 호출 이후에는 해당 객체를 재사용할 수 없습니다. createDecipherivupdatefinal의 올바른 호출 순서를 지키는 것이 안정적인 복호화의 핵심입니다.