node.jsで擬似乱数を生成する方法
提供: Node.js/JavaScript入門
スポンサーリンク
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 を利用して良い
関連項目
ツイート
スポンサーリンク