My AndroidクライアントとServer(Servlet)で乱数を取得しています。私はクライアントとサーバーの両方で同じSecureRandomアルゴリズム( "SHA1PRNG")を使用しています。私のシード値は両方で同じです。しかし、私が得ている出力番号は、クライアントとサーバーの両方で異なっています。それの理由は何でしょうか?ここに私のコードは次のとおりです。SecureRandom numberのアルゴリズム
SecureRandom random = new SecureRandom();
try {
random.getInstance("SHA1PRNG");
} catch (Exception e) {
// ...
}
;
random.setSeed(1097327);
byte[] b1 = new byte[3];
random.nextBytes(b1);
long value = 0;
for (int i = 0; i < b1.length; i++) {
value += (b1[i] & 0xff) << (8 * i);
Toast.makeText(getApplicationContext(), Long.toString(value),
Toast.LENGTH_LONG).show();
}
Androidでセキュアなランドン番号ジェネレータを使用していますが、同じシードインスタンスを2回使用すると、同じランダム番号が2回表示されます。私がサーブレットで同じことをしたとき、私は2つの同じ種子に対して2つの等しい乱数を得ました。しかし問題は乱数です** Androidはサーブレットの乱数と等しくありません** – suraj
Androidプラットフォームとサーブレットで使用されるJDKの実装は多少異なるでしょう。しかし、私の主張は残っています。いくつかの異なるプラットフォームで予測可能なシーケンスを得るために、契約によって、できるだけ安全にランダムに数値を生成することになっているクラスを使用することは良い考えではありません。契約によって、シードが与えられた予測可能なシーケンスを生成する、または一方の側で数値を生成し、他方の側でそれらを共有する、独自のアルゴリズムを使用してみてください。 –
よろしいですか。私はそれを考慮します。ありがとう。あなたはちょうど素晴らしい – suraj