我目前具有越来越BouncyCastle的工作有些困难。 现在一直在寻找在这几天的,所以我希望你能提供任何有用的见解。
这里的设置。 使用REST协议中,Android的客户端发送POST-消息发送到服务器。 我做了一个单独的项目,代表类这些消息,这样我可以包括这是在客户端和服务器上的库。 消息对象首先被解析到一个JSON字符串事后解释在服务器上。
用于数据完整性的缘故,一个消息包含一个数字签名(DSA)。 我问这个问题上一个问题前面关于公共密钥的交换。 我得到的答案是有帮助的,因为这似乎正常工作。
然而,验证不断失败。 尼古拉Elenkov在其他线程的回答提到了一个可能的原因:“顺便说一句,它可能会更容易,如果你正在处理一个单一的供应商,所以你可能想在服务器上使用充气城堡一样。” 这是我得到的麻烦(并且由于它是一种不同的问题,我做了一个新的话题了这一点)
下面是从消息级(从公共库)的代码的摘录:
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()调用消息级。
最后一件事我应该提到的是,我的工作在Mac OS X与Apache服务器菲利克斯。 如果该项目完成后,服务器模块应该很容易移植到另一台机器。
所以,我要去哪里错了? 感谢您已经帮忙。