Bouncycastleを使用して、公開鍵を使用してファイルを暗号化しようとしています。プログラムでプロバイダーを登録しました:
Security.addProvider(new BouncyCastleProvider());
公開鍵オブジェクトを作成しました。
pGPEncryptedDataGeneratorとキーを使用してファイルを暗号化すると、ClassNotFound例外が発生します。
プロバイダーは実行時にこのクラスを見つけることができないようですが、確かに私はそのjarを持っています...
Tomcatでアプリを実行しています。 Mavenを使用して依存関係を処理する-私が置いた弾力のある城のjarは、bcpg、bcprov、bcmail、bctspです。 1.4と1.6の両方のバージョンを試しましたが、成功しませんでした。私は、Eclipseのmavenプラグインの「依存関係の階層」とpomの除外を使用して、プロジェクトにbouncycastleの複数のバージョンがないことを確認しました。
これはスタックトレースです。
org.bouncycastle.openpgp.PGPException: exception encrypting session key
at org.bouncycastle.openpgp.PGPEncryptedDataGenerator.open(Unknown Source)
at org.bouncycastle.openpgp.PGPEncryptedDataGenerator.open(Unknown Source)
.....(web application stack trace and uninteresting stuff).....
Caused by: Java.security.NoSuchAlgorithmException: No such algorithm: ElGamal/ECB/PKCS1Padding
at javax.crypto.Cipher.getInstance(DashoA13*..)
at org.bouncycastle.openpgp.PGPEncryptedDataGenerator$PubMethod.addSessionInfo(Unknown Source)
... 42 more
Caused by: Java.security.NoSuchAlgorithmException: class configured for Cipher(provider: BC)cannot be found.
at Java.security.Provider$Service.getImplClass(Provider.Java:1268)
at Java.security.Provider$Service.newInstance(Provider.Java:1220)
... 44 more
Caused by: Java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.JCEElGamalCipher$NoPadding
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1676)
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1521)
at Java.security.Provider$Service.getImplClass(Provider.Java:1262)
BouncyCastle Securityプロバイダーのインストールに問題がある場合は、次のいずれかを行う必要があります。
$Java_HOME/jre/lib/security/Java.security
プロバイダーとしてのファイル(複数のJRE/JDKがインストールされている場合など、実行時に使用するJREに必ず追加してください)例えば。
security.provider.2=org.bouncycastle.jce.provider.BouncyCastleProvider
(そして、その下にあるセキュリティプロバイダーの番号を付け直します-最も優先度の高いプロバイダーとして配置しないでください)。
$Java_HOME/jre/lib/security/Java.policy
は「無制限」である必要があります(おそらく無制限のポリシーファイルをJavaホームページからダウンロードできます)。私の場合、一度はうまくいきましたが、その後、BCを使用しようとするとClassNotFoundExceptionが発生しました。 Tomcatを再起動したところ、問題なく動作しました。
開発中に頻繁に行うようにアプリを再デプロイすると、機能しなくなると思います。 JNIはこの問題に悩まされているもう1つの問題です。
私たちの場合、これは問題ではありません。テストシステムと運用システムに再展開することはありません。 jarをコンテナーのlibディレクトリーに手動でコピーする代わりに、jarをアプリと一緒に出荷することを好みます。
Libフォルダーにjavapns.jarおよびbcprove-jdk15on-1.47.jarファイルを追加する必要があります
import javapns.Push;
import org.Apache.log4j.BasicConfigurator;
public class SendPushNotification {
public static void main(String[] args) {
try {
BasicConfigurator.configure();
Push.alert("Hello World!", "Cetificate.p12", "password", false,
"mydeviceToken");
} catch (Exception e) {
System.out.println(e);
}
}
}