2012-03-12 11 views
1

私はアプリケーションのクラスパスに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の両方で同じです。

答えて

-1

明らかに、実装は全く実装されていません(SecureRandom)。あなたは、このようなシステム(ハーモニー)から実装(静的メソッドを呼び出すためにインスタンスを作成する必要はありません)を取得することができます

SecureRandom.getInstance("SHA1PRNG") 

はBouncyCastleは、おそらく同様の方法で使用される可能性がDigestRandomGeneratorを持っているのが、あってもなくてもよいです生成SecureRandomを使用してのOTP:

再日SHA1PRNGとの互換性(独自のように見える、と本当によく定義された)は、固定種とSecureRandomないこのための適切なツールです。 OTPを生成するには、予測可能な要素(時間またはカウンタ)と組み合わされた秘密鍵を使用する必要があります。標準的な方法は、例えばHMACによって指定されるようなHMACを使用することである。誓い。詳細はRFC 4226をご覧ください。

+0

は、それはありませんユーザー指定のシードにエントロピーを追加しないでください。セキュリティで保護された乱数の2つのインスタンスがjavaで使用されるとき、同じシーケンスの数字が生成されるのはこのためです。アンドロイドでも同じことが起きています。しかし問題は、アンドロイドとjavaで生成されるシーケンスが同じではないということです。 – Ashwin

+0

OK、私は間違っていました。それを複数回呼び出すと、エントロピーが追加されます。それでも、シーケンスの照合が必要な場合は、データベースを使用して番号を増やしてください。安全なランダムジェネレータはこのためのツールではありません。 AndroidでBCを使用するのは簡単ではないという更新済みの回答をご覧ください。 –

+0

私は実際には一度のパスワードとしてsequesncesを使用しています。私は数字を使用してそれを増やすことはできず、それをotpとして使用することはできません。はい、私は "trng"を使用している場合、目的を破るだろうが、私は擬似乱数ジェネレータを使用しています。 – Ashwin

3

次の行を追加しましたか?

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

デフォルトのJavaセキュリティにはBouncy Castleの実装が含まれていないため、使用する前にBouncy Castle Providerをメモリ内で使用可能なプロバイダのリストに追加する必要があります。私はあなたがPRNGアルゴリズムとして「SHA1PRNG」を使用して乱数をシード.Whenクライアント(アンドロイド)とサーバ(サーブレット)の両方に数値の同じsequesnceをaceiveしようとしています

http://www.java2s.com/Code/Java/Security/SecureRandomSHA1PRNG.htm

+0

あなたが推薦しているものを説明することを忘れないでください。コメントのおかげで –

+0

- プロバイダを使用する前にメモリに追加する必要性に関する行が追加されました – k2zinger

関連する問題