2012-12-05 22 views
23

私はJavaでいくつかの暗号化技術を使用するスイングベースのアプリケーションを作成しています。しかし javax.crypto.KeyGenerator.getInstanceは( "AES"、 "BC")例外を与える:JCEはJava SwingアプリケーションでプロバイダBCを認証できません

java.security.NoSuchProviderException: JCE cannot authenticate the provider BC 
     at javax.crypto.SunJCE_b.a(DashoA13*..) 
     at javax.crypto.KeyGenerator.getInstance(DashoA13*..) 

だから、問題は何ですか?

+8

これで

java.lang.SecurityException: JCE cannot authenticate the provider SC 

詳しい情報は通常、あなたがクラス/ jarファイルおよび/またはクラスパスのパッケージと間違って何かをやった意味します。 BCクラスをjarから抽出して別のjarファイルに入れることはできません。 –

答えて

25

GregSのコメントを展開するには、すべてのJCEプロバイダのJARがJavaランタイムによって信頼される前に署名されている必要があります。

BouncyCastleは問題なく動作する署名付きJARを提供します。ただし、このJARからクラスファイルを抽出するか、ソースを再コンパイルすると、署名が削除され、Javaがコードを拒否します。 How to sign a custom JCE security provider

+7

jarファイルの解凍や再コンパイルに失敗しました。http://repo2.maven.org/maven2/org/bouncycastle/からのみbcprov-jdk14とbcpkix-jdk14をダウンロードします。しかし、それは私のために動作しません! –

23

1. 編集のjre \ libに\セキュリティ\のjava.security

追加security.provider.10 = org.bouncycastle.jce.provider.BouncyCastleProvider

すると、この関連のSOの質問を参照してくださいこの問題を見つけることが、実際にSpongyCastleを使用してそれらのために

2. コピーBC * JREへの.jar \ libに\ extに

+0

この提案はなぜ投票されたのですか?それは私を助けました:http://stackoverflow.com/questions/27168951/jce-cannot-authenticate-the-provider-bc-when-running-a-jar – Anton

+0

これは私を助けた唯一のものでした。 –

+1

これは私にとって素晴らしい仕事でした!私はjarファイルを直接指定しましたが(クラスファイルを別々に抽出しませんでしたが)、私は例外を述べました。 jythonがそれを抽出する可能性があります。素晴らしい解決策。ありがとう! – rsmoorthy

3

、Android上でそれを知ることは面白いかもしれませんそのような署名テストはありません。あなたのテストでは、署名を気にしないので、SpongyCastleをopenJDK-8経由で使用することもできます。参考のため

は、SpongyCastleでエラーが読み取りますthis issue

関連する問題