node.jsで擬似乱数を生成する方法

提供: Node.js/JavaScript入門
2016年1月9日 (土) 23:13時点におけるDaemon (トーク | 投稿記録)による版 (ページの作成:「node.jsで'''擬似乱数'''を生成するには、'''crypto'''モジュールを利用します。任意の長さの擬似乱数を生成できます。 '''読み...」)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク

node.js擬似乱数を生成するには、cryptoモジュールを利用します。任意の長さの擬似乱数を生成できます。

読み方

擬似乱数
ぎじ らんすう

概要

いろいろなシーンで擬似乱数が必要になります。たとえば、暗号で利用するの生成で利用します。pbkdf(鍵導出関数)などと組み合わせて利用することになるでしょう。

擬似乱数の生成方法は、 crypto の randomBytes () の第一引数に、欲しい擬似乱数の長さをセットして、呼び出します。

乱数の生成の関数

乱数の生成には、いくつかの関数があります。

randomBytes
暗号学的に強い擬似乱数を生成します
pseudoRandomBytes
暗号学的ではない 強い擬似乱数を生成します

暗号 で使う場合には、 randomBytes() を利用したほうが良いですが、十分なエントロピーが必要になります。エントロピーが足りない場合、エラーがスローされますので注意が必要です。

暗号 で使わないのであれば、 pseudoRandomBytes() を利用して構いません。

ソースコード

サンプルでは、console.log()で表示するときに、意図的に base64 エンコードして表示しています。base64 エンコードせずに、標準出力に出力すると、バイト列が出力されるので、意味不明な画面になります。

ここでは、256バイトの擬似乱数を作成します。

/*
 * random1.js
 * Copyright (C) 2016 kaoru <kaoru@localhost>
 */
(function(){
  'use strict';
 
  // async
  var crypto = require("crypto");
  crypto.randomBytes(256, function(ex, buf) {
          if(ex) throw ex;
          console.log("%d %s", buf.length, buf.toString('base64') );
  });
 
  // sync
  try {
        var buf = crypto.randomBytes(256);
        console.log("%d %s", buf.length, buf.toString('base64') );
  } catch (ex) {
        // handle error
  }
})();

実行例

ページの表示の都合で、擬似乱数生成器によって出力されたバイト列(のbase64エンコードしたもの)は、途中で改行を入れています。

$ node random1.js
256 mN8UOf3W0mV1HaYgVrUoPtSsAY5BDstLzZ9pcHvftIcwu6PKMnfiJd0GIWLI0OZfx68ICfcv25u
qKyb3Ao6hj+kAYYhgxSDnlXlc63nog+p2DTxI8X/5TQTbtq8roe9KvQzZjftx6SQqniYorXhOfujEn2
b0wFfWRCBTsjXTkhlSmJv88ykKMuviY8d/5QjaydgvH0iM1Ywjp5dFkiPKdm7evalbhxA7X4KSk0DOB
AGgJTZXOxXHaMUlXo86b9GClJkX6ffgfXpvNxVOQ6PU/meadFrH4VPr+dZoTFRMh2e6W0o2cwpvyA+C
UNyOtWGr4qAvVUeUf491riJpWUBJ7Q==
256 zHuYOvLyI78m1CjBsnTNg5LOyKDgB9HOUI0OB7LhKVRqUypUVkYBngafw6eilgtE3IvIARhx63p
YKl+VGhetqbK0kle7PaUDthZx2ULZJc4NwoAoq3FGR065CcD3burKCmHnPPYQrqNQdhBvMBMyqkh4Pa
NqtuvqjMfL7wEOcKWTmUmlguF3Y1LCLpnCUN+dXluc9hRPTb/t27iX5PVSu/dB1mxXpZwJMq3JdoCKY
RDNZXP+F4RdHGZRZY735RH+MADgO/YqVZ00qfor7GKEcNmvU2/b1pasmhapRqmSa79xES+bSCX0oq6s
d8YyuofYkwZlRTctitL+B+GD0eozHw==

まとめ

  • 暗号で擬似乱数を利用する場合は、 randomBytes を利用する
    • エントロピーが足りないとエラーがスローされる
  • 暗号以外で擬似乱数を使う場合は、 pseudoRandomBytes を利用して良い

関連項目




スポンサーリンク