我目前在使BouncyCastle工作時遇到一些困難。現在已經搜索了幾天,所以我希望你能提供任何有用的見解。服務器端的BouncyCastle以Android手機作爲客戶端
這是設置。使用REST協議,Android客戶端將POST消息發送到服務器。我用代表這些消息的類製作了一個單獨的項目,這樣我就可以將它作爲庫包含在客戶端和服務器上。消息對象首先被解析爲JSON字符串,然後在服務器上解釋。
爲了數據完整性,消息包含數字簽名(DSA)。我問了關於這個問題earlier關於公鑰交換的問題。我得到的答案是有幫助的,因爲這似乎工作正常。
但是,驗證仍然失敗。 Nikolay Elenkov在另一個線索中的回答提到了一個可能的原因:「順便說一句,如果你正在處理單個供應商,它可能會更容易,所以你可能也想在服務器上使用Bouncy Castle。」這是我遇到麻煩的地方(因爲這是一個不同的問題,我爲此做了一個新的話題)
下面是來自消息類(來自公共庫)的代碼摘錄:
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()呼籲消息類。
我應該提到的最後一件事是我正在使用Apache Felix服務器在Mac OS X上工作。如果項目完成,服務器模塊應該可以輕鬆地移植到另一臺機器上。
那麼,我哪裏錯了?感謝您的幫助。
設備上已經有BouncyCastle的版本(可能已經很老了並且已經損壞)。這可能會造成干擾。嘗試重新打包的版本,如[SpongyCastle](https:// github。com/rtyley/spongycastle) - 它基本上只是一個重構的BouncyCastle,它不會干擾設備上的任何破損的POS。 – Jens