私はアプリケーションのクラスパスにAndroidとJavaのバウンスのjarファイルを追加しました。 これは私が両方で使ったコードです。しかし、それはプロバイダ "BC"を認識していないようです。Bouncy castleこのようなプロバイダの例外はありません
SecureRandom sr1=new SecureRandom().getInstance("SHA1PRNG", "BC");
System.out.println(sr1.getProvider());
sr1.setSeed(12);
byte[] a=new byte[0];
sr1.nextBytes(a);
int ai=a[0];
System.out.println(ai);
それはアンドロイドとJavaの両方の中に次の例外がスローされます。
java.security.NoSuchProviderException: no such provider: BC
これを修正する方法は?
私はポリシーファイルにプロバイダを追加していませんでした。それをした後、私は次の例外を受け取ります。
java.security.NoSuchAlgorithmException: no such algorithm: SHA1PRNG for provider
BC<br>
それが弾む城は「SHA1PRNG」アルゴリズムの実装を提供しないことを意味するのでしょうか?しかし、私が弾力のある城をインポートした全体の理由は、アンドロイドとjavaの両方で共通のプロバイダを持つことでした。同じシードで生成された乱数のシーケンスは、アンドロイドとjavaの両方で同じです。
は、それはありませんユーザー指定のシードにエントロピーを追加しないでください。セキュリティで保護された乱数の2つのインスタンスがjavaで使用されるとき、同じシーケンスの数字が生成されるのはこのためです。アンドロイドでも同じことが起きています。しかし問題は、アンドロイドとjavaで生成されるシーケンスが同じではないということです。 – Ashwin
OK、私は間違っていました。それを複数回呼び出すと、エントロピーが追加されます。それでも、シーケンスの照合が必要な場合は、データベースを使用して番号を増やしてください。安全なランダムジェネレータはこのためのツールではありません。 AndroidでBCを使用するのは簡単ではないという更新済みの回答をご覧ください。 –
私は実際には一度のパスワードとしてsequesncesを使用しています。私は数字を使用してそれを増やすことはできず、それをotpとして使用することはできません。はい、私は "trng"を使用している場合、目的を破るだろうが、私は擬似乱数ジェネレータを使用しています。 – Ashwin