Node.jsのcrypto.privateEncrypt()メソッドの使い方と解説
Node.jsのcrypto.privateEncrypt()メソッドは、関数に渡された秘密鍵を使って、指定したデータを暗号化するためのメソッドです。秘密鍵による暗号化が必要な場面、たとえばデジタル署名の生成などでよく利用されます。
構文
crypto.privateEncrypt(privateKey, buffer)
パラメータ
各パラメータの詳細は以下の通りです。
privateKey – Object、String、Buffer、KeyObjectのいずれかの型を指定できます。
key – PEM形式でエンコードされた秘密鍵です。String、Buffer、KeyObjectのいずれかの型が使用できます。
passphrase – 秘密鍵に設定されたパスフレーズ(省略可能)。
padding – crypto.constantsで定義されているパディング方式の値(省略可能)。
buffer – 暗号化対象となるデータ本体です。String、TypedArray、Buffer、ArrayBuffer、DataViewのいずれかの型を指定できます。
使用例1:Base64形式で出力する
まず「privateEncrypt.js」という名前のファイルを作成し、以下のコードをコピーしてください。作成後、次のコマンドでプログラムを実行できます。
node privateEncrypt.js
privateEncrypt.js
// crypto.privateEncrypt()メソッドの動作を確認するNode.jsプログラム
// cryptoモジュールとfsモジュールを読み込む
const crypto = require('crypto');
const fs = require("fs");
// generateKeyPairSync()メソッドでRSA鍵ペアを生成する
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();
実行結果
C:\home\node>> node privateEncrypt.js Plaintext: TutorialsPoint! Encrypted Text: AhphoL+l/e739LkdfCAm2XuiddgTG7jjdGlLviiRqD4LyTtxJmpkgq5bSkyI7Og4XlBtszBB9HLQRH T5j850ZAxGYA==
上記の実行結果から、元の平文が秘密鍵によって暗号化され、Base64エンコードされた文字列として出力されていることが確認できます。
使用例2:Bufferオブジェクトとして出力する
続いて、もう一つの例を見てみましょう。先ほどの例では暗号化結果をBase64文字列に変換しましたが、今度はBufferオブジェクトとしてそのまま返しています。
// crypto.privateEncrypt()メソッドの動作を確認するNode.jsプログラム
// cryptoモジュールとfsモジュールを読み込む
const crypto = require('crypto');
const fs = require("fs");
// generateKeyPairSync()メソッドでRSA鍵ペアを生成する
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();
実行結果
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 ... >
補足ポイント
サンプルコード内の
modulusLength: 530は動作確認用の小さな値です。実際の運用では、セキュリティ確保のため2048ビット以上のRSA鍵を使用することを強く推奨します。privateEncrypt()は秘密鍵で暗号化を行うため、対応する公開鍵を持つ相手のみが
crypto.publicDecrypt()で復号化できます。この性質を利用して、電子署名の生成などに活用されています。暗号化対象のデータサイズは鍵長に依存するため、大きなデータを扱う場合は共通鍵暗号との組み合わせ(ハイブリッド暗号)を検討しましょう。
-
Node.jsのcrypto.privateDecrypt()メソッドの使い方を徹底解説
crypto.privateDecrypt()メソッドは、crypto.publicEncrypt()メソッドを使って対応する公開鍵で事前に暗号化されたデータを、パラメータとして渡された秘密鍵を用いて復号するために使用されます。RSA暗号方式などの公開鍵暗号システムにおいて、安全なデータ復号を実現するための重要なAPIです。 構文 crypto.privateDecrypt(privateKey, buffer) パラメータ このメソッドが受け取る各パラメータの詳細は以下のとおりです。 privateKey(秘密鍵) – 復号に使用する秘密鍵を指定します。Object、String、Bu
-
Node.jsのcrypto.getHashes()メソッドとは?使い方とサポートされるハッシュアルゴリズム一覧の取得方法
crypto.getHashes()メソッドは、Node.jsでサポートされているすべてのハッシュアルゴリズムの名前を配列形式で返します。cryptoモジュールには非常に多くのハッシュアルゴリズムが用意されており、その中でも歴史的によく使われてきたのが「MD5(Message-Digest Algorithm 5)」です。ただし、MD5には衝突耐性の脆弱性があるため、現在ではセキュリティ用途にはSHA-256やSHA3系など、より強力なアルゴリズムを使うことが推奨されています。 構文 crypto.getHashes() 引数(パラメータ) このメソッドは、サポートされているハッシュアルゴ