crypto.privateEncrypt() 메서드는 함수에 전달된 개인 키(private key) 매개변수를 사용하여 주어진 데이터 내용을 암호화하는 데 사용됩니다. 이 메서드는 RSA 알고리즘 기반으로 동작하며, 개인 키로 암호화한 데이터는 대응되는 공개 키(public key)로 복호화할 수 있어 전자 서명(digital signature) 구현에도 활용됩니다.
문법(Syntax)
crypto.privateEncrypt(privateKey, buffer)
매개변수(Parameters)
위 메서드에서 사용되는 매개변수는 다음과 같습니다.
privateKey – Object, String, Buffer 또는 KeyObject 타입을 가질 수 있으며, 다음 속성들을 포함합니다.
key – PEM 형식으로 인코딩된 개인 키입니다. String, Buffer 또는 KeyObject 타입일 수 있습니다.
passphrase – 개인 키에 대한 선택적(optional) 암호 문구입니다.
padding – crypto.constants에 정의된 선택적 패딩 값입니다.
buffer – 암호화할 데이터 내용을 담고 있는 필드입니다. 사용 가능한 타입은 String, TypedArray, Buffer, ArrayBuffer, DataView입니다.
예제 1: Base64 형식으로 결과 출력하기
privateEncrypt.js라는 이름의 파일을 생성하고 아래 코드를 복사합니다. 파일 생성 후 다음 명령어로 코드를 실행할 수 있습니다.
node privateEncrypt.js
// Node.js 프로그램: crypto.privateEncrypt() 메서드의 동작 시연
// crypto와 fs 모듈 불러오기
const crypto = require('crypto');
const fs = require("fs");
// generateKeyPairSync() 메서드로 키 파일 생성
function generateKeyFiles() {
const keyPair = crypto.generateKeyPairSync('rsa', {
modulusLength: 530,
publicKeyEncoding: {
type: 'spki',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem',
cipher: 'aes-256-cbc',
passphrase: ''
}
});
// 생성된 개인 키를 파일에 저장
fs.writeFileSync("private_key", keyPair.privateKey);
}
// 키 생성 메서드 호출
generateKeyFiles();
// 전달받은 문자열을 암호화하는 함수
function encryptString(plaintext, privateKeyFile) {
const privateKey = fs.readFileSync(privateKeyFile, "utf8");
// privateEncrypt() 메서드와 개인 키로 데이터 암호화
const encrypted = crypto.privateEncrypt(
privateKey, Buffer.from(plaintext));
return encrypted.toString("base64");
}
// 암호화 및 복호화될 데이터
const plainText = "TutorialsPoint!";
// 문자열 암호화 메서드 호출
const encrypted = encryptString(plainText, "./private_key");
// 원본 평문 출력
console.log("Plaintext:", plainText);
// 암호화된 텍스트 출력
console.log("Encrypted Text: ", encrypted);
console.log();
실행 결과(Output)
C:\home\node>> node privateEncrypt.js Plaintext: TutorialsPoint! Encrypted Text: AhphoL+l/e739LkdfCAm2XuiddgTG7jjdGlLviiRqD4LyTtxJmpkgq5bSkyI7Og4XlBtszBB9HLQRH T5j850ZAxGYA==
위 예제에서는 암호화된 결과를 toString("base64")로 변환하여 사람이 읽기 쉬운 Base64 문자열 형태로 출력했습니다.
예제 2: Buffer 객체 그대로 출력하기
이번에는 암호화 결과를 Buffer 객체 형태로 그대로 반환하는 예제입니다.
// Node.js 프로그램: crypto.privateEncrypt() 메서드의 동작 시연
// crypto와 fs 모듈 불러오기
const crypto = require('crypto');
const fs = require("fs");
// generateKeyPairSync() 메서드로 키 파일 생성
function generateKeyFiles() {
const keyPair = crypto.generateKeyPairSync('rsa', {
modulusLength: 530,
publicKeyEncoding: {
type: 'spki',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem',
cipher: 'aes-256-cbc',
passphrase: ''
}
});
// 생성된 개인 키를 파일에 저장
fs.writeFileSync("private_key", keyPair.privateKey);
}
// 키 생성 메서드 호출
generateKeyFiles();
// 전달받은 문자열을 암호화하는 함수
function encryptString(plaintext, privateKeyFile) {
const privateKey = fs.readFileSync(privateKeyFile, "utf8");
// privateEncrypt() 메서드와 개인 키로 데이터 암호화
const encrypted = crypto.privateEncrypt(
privateKey, Buffer.from(plaintext));
return encrypted;
}
// 암호화 및 복호화될 데이터
const plainText = "TutorialsPoint!";
// 문자열 암호화 메서드 호출
const encrypted = encryptString(plainText, "./private_key");
// 원본 평문 출력
console.log("Plaintext:", plainText);
// 암호화된 버퍼 출력
console.log("Encrypted Buffer: ", encrypted);
console.log();
실행 결과(Output)
C:\home\node>> node privateEncrypt.js Plaintext: TutorialsPoint! Encrypted Buffer: <Buffer 00 a2 ce 5d 27 d7 15 ec a7 bc 5b 12 73 62 92 82 6d f9 6b 82 38 06 dd bf b3 b8 1f 23 b4 d9 e9 aa 1c 50 0f c9 d7 12 f9 17 db 91 dc 05 46 b0 0c 08 14 50 ... >
정리
crypto.privateEncrypt() 메서드는 개인 키를 사용해 데이터를 암호화하며, 첫 번째 인자로 개인 키 정보(key, passphrase, padding)를 담은 값을, 두 번째 인자로 암호화할 buffer 데이터를 받습니다. 실무에서는 보통 crypto.publicDecrypt() 메서드와 함께 사용하여 개인 키로 서명하고 공개 키로 검증하는 디지털 서명 흐름을 구현합니다. 참고로 예제의 modulusLength: 530은 학습용 최소값이며, 실제 운영 환경에서는 보안 강도를 위해 2048비트 이상의 키 길이를 사용하는 것이 권장됩니다.