Node.jsのcrypto.randomBytes()メソッドの使い方を解説
crypto.randomBytes()メソッドとは
Node.jsのcrypto.randomBytes()メソッドは、暗号学的に強度の高い疑似乱数データを生成するための機能です。このメソッドは、生成されるバイト列に十分なエントロピーが確保されるまで処理を完了しませんが、実際にかかる時間は数ミリ秒程度に収まります。生成されたランダムバイト列は、セッショントークンや暗号鍵など、セキュリティに関わるさまざまな用途に活用できます。
構文
crypto.randomBytes(size, [callback])
パラメータ
各パラメータの詳細は以下のとおりです。
size – 生成するバイト数を指定します。最大値は2**31 - 1(2,147,483,647)で、これを超える値は指定できません。
callback – メソッドの実行中にエラーが発生した場合に呼び出されるコールバック関数です。第1引数にエラーオブジェクト、第2引数に生成されたバッファが渡されます。コールバックを省略した場合は、同期的にBufferオブジェクトが返されます。
使用例1:非同期(コールバック形式)
まずは、コールバック関数を使った非同期処理の例を見てみましょう。「randomBytes.js」という名前のファイルを作成し、以下のコードをコピーしてください。作成後、次のコマンドで実行できます。
node randomBytes.js
randomBytes.js
// crypto.randomBytes() 非同期処理のサンプル
// cryptoモジュールを読み込む
const crypto = require('crypto');
crypto.randomBytes(64, (err, buf) => {
if (err) throw err;
console.log(`${buf.length} bytes of random data: ${buf.toString('hex')}`);
});
出力結果
C:\home\node>> node randomBytes.js 64 bytes of random data: eb2bcebb999407286caea729998e7fa0c089178f8ca43857e73ea3ff66dbe1852af24a4b0199be 9192798a3f8ad6d6475db3621cfacf38dcb0fba5d77d73aaf5
使用例2:同期処理
続いて、コールバックを渡さずに同期的に呼び出す例です。この場合、生成されたランダムデータはBufferオブジェクトとして直接返されます。
// crypto.randomBytes() 同期処理のサンプル
// cryptoモジュールを読み込む
const crypto = require('crypto');
const buffer = crypto.randomBytes(256);
console.log(
`${buffer.length} bytes of random data: ${buffer.toString('base64')}`);
出力結果
C:\home\node>> node randomBytes.js 256 bytes of random data: n7yfRMo/ujHfBWSF2VFdevG4WRbBoG9Fqwu51+/9ZBUV6Qo88YG7IbcEaIer+g+OgjMv4RyNQ6/67a F5xWmkOR3oA6J6bdAJ1pbstTuhIfItF1PQfP26YXk1QlaoKy/YJxPUngyK4kNG9O04aret4D+2qIq9 BUaQcv+R9Xi014VKNUDZ+YQKEaLHBhJMq6JgehJ56iNbdNJ4+PN7SQwjNdZ8gS76izAwYsSZ7Kuyx2 VzdXIKsLmjleuJ2DZ7/6Yyn8WM9463dhuh0KQ5nwFbgzucvjmdvDjBlGFZBGlKs6AXqYh+0Oe6Ckkv 3OpnXOJs+GExbmnvjaeDQ03khpdJfA==
まとめ
crypto.randomBytes()は、Math.random()のような一般的な乱数生成とは異なり、暗号学的な安全性が保証された乱数を提供します。パスワードリセット用トークン、APIキー、初期化ベクトル(IV)などの生成に適しており、セキュリティ要件の高いアプリケーションでは欠かせないメソッドです。用途に応じて、非同期(コールバック形式)と同期の両方の呼び出し方を使い分けられます。
-
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() 引数(パラメータ) このメソッドは、サポートされているハッシュアルゴ