2011-05-15 5 views

答えて

10

ソフトウェアでは本当に乱数を生成することはできません。ソフトウェアは決定的です。入力があると、原則として予測可能な出力が生成されます。

乱数を得るために、ランダムに見える数字のシーケンスを生成するアルゴリズムがいくつか発明されています(実際にはそうではありません - そのため疑似乱数と呼ばれています)。

このようなアルゴリズムは、いくつかの開始値、シードから始まり、次の擬似乱数を生成するためにいくつかの計算を行います。

アルゴリズムが優れている場合は、シード値に差異はないはずです。シード値の1つは、乱数を生成する際に他のシード値よりも優れているべきではありません。

多くの場合、現在の時刻がシード値とみなされるため、一連の数字を生成するたびに異なるシーケンスが生成されます。同じシード値を使用すると、実行するたびに同じ擬似乱数シーケンスが得られます。

暗号化目的で擬似乱数を使用する場合は、攻撃者がシード値を知っていれば、システムのセキュリティを損なう可能性のある乱数列を再生成できるため、非常に注意する必要があります。本当に安全なシステムの場合、人々は特別なハードウェアベースの乱数ジェネレータを使用し、真の乱数を生成することができます。 Javaには、このようなシステムとのインターフェースをとるクラスjava.security.SecureRandomがあります。

さまざまなアルゴリズムの詳細と詳細については、WikipediaのRandom number generationを参照してください。

+0

私は投票しますが、明らかに私の評判は低すぎます。 – namen

+0

私はあなたのためにupvoted。 ;-)かなり良い答えでした。あなたは答えも受け入れることができることを忘れないでください。 –