現在、BouncyCastleを機能させるのにいくつかの問題があります。これを数日間検索しているので、役立つ洞察を提供していただければ幸いです。
これがセットアップです。AndroidクライアントはRESTプロトコルを使用して、POSTメッセージをサーバーに送信します。これらのメッセージを表すクラスを使用して別のプロジェクトを作成したので、これをクライアントとサーバーの両方にライブラリとして含めることができます。メッセージオブジェクトは最初にJSON文字列に解析され、その後サーバーで解釈されます。
データの整合性を保つために、メッセージにはデジタル署名(DSA)が含まれています。公開鍵の交換については、先ほどこの問題について質問しました。これは正しく機能しているように見えるので、私が得た答えは役に立ちました。
ただし、検証は失敗し続けます。他のスレッドでのNikolayElenkovの回答は、考えられる原因について述べています。「ところで、単一のプロバイダーを扱っている方がおそらく簡単なので、サーバーでもBouncyCastleを使用することをお勧めします。」これは私が問題を抱えているところです(そしてそれは一種の別の問題なので、私はこれのために新しいトピックを作りました)
メッセージクラス(共通ライブラリから)からのコードの抜粋は次のとおりです。
import org.bouncycastle.jce.provider.BouncyCastleProvider;
// ....
private byte[] signature;
// ....
public void sign(DSAPrivateKey key) throws Exception {
Security.addProvider(new BouncyCastleProvider());
Signature signer = Signature.getInstance("SHA1withDSA");
signer.initSign(key);
signer.update(this.toByteArray());
this.signature = signer.sign();
}
public boolean verifySignature(DSAPublicKey key) throws Exception {
Security.addProvider(new BouncyCastleProvider());
Signature signer = Signature.getInstance("SHA1withDSA");
signer.initVerify(key);
signer.update(this.toByteArray());
return (signer.verify(this.signature));
}
bcprov-jdk15on-147.jarを各プロジェクトのクラスパスに含めました:クライアント(必要だとは思わないが、誰が知っているか)、プロトコルプロジェクト、およびサーバープロジェクト。
BouncyCastleによく見られる例外が発生しているため、サーバーはこれを処理できないようです。
java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.getDeclaredConstructor(Class.java:1985)
at com.google.gson.internal.ConstructorConstructor.newDefaultConstructor(ConstructorConstructor.java:82)
at com.google.gson.internal.ConstructorConstructor.getConstructor(ConstructorConstructor.java:66)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:71)
at com.google.gson.Gson.getAdapter(Gson.java:353)
at com.google.gson.Gson.fromJson(Gson.java:754)
次の行は、メッセージクラスのgson.fromJson()呼び出しです。
最後に言及しなければならないのは、ApacheFelixサーバーを搭載したMacOSXで作業しているということです。プロジェクトが終了した場合、サーバーモジュールは別のマシンに簡単に移植できる必要があります。
それで、私はどこで間違っているのですか?すでに助けてくれてありがとう。