パスワードの生成に使用する乱数 (完全ではない) を取得する必要があります。
私がしていること: 現在、私はSecureRandomでそれらを生成しています。
でオブジェクトを取得しています
SecureRandom sec = SecureRandom.getInstance("SHA1PRNG", "SUN");
そして、このようにシードします
sec.setSeed(seed);
Target : 乱数を作成する (できれば高速な) 方法で、少なくとも SHA1PRNG SecureRandom 実装と同様に暗号学的に安全です。これらは、JRE と Android の異なるバージョンで同じである必要があります。
編集: シードはユーザー入力から生成されます。
問題: 次SecureRandom.getInstance("SHA1PRNG", "SUN");
のように失敗します:
java.security.NoSuchProviderException: SUN
. 省略, "SUN"
すると乱数が生成されますが、それらはデフォルト(JRE 7) の数値とは異なります。
質問: どうすれば目標を達成できますか?
あなたはそれが予測可能であることを望んでいません:同じ前提条件が同じ出力をもたらすように予測可能性が必要なので、私は望んでいます。それらが同じでない場合、ユーザーがアプリケーションに期待することを実行するのは不可能 です。
編集: 予測可能とは、1 バイト (または 100) を知っている場合は次を予測できないはずですが、シードを知っている場合は最初 (および他のすべて) を予測できるはずです。たぶん、別の単語が再現可能です。
もっと直感的な方法を知っている人がいたら教えてください!