我"SHA1withRSA"
在 Android 上使用 Bouncy Castle 的签名存在问题:Bouncy Castle 签名值与 .NET 签名值不匹配。
我尝试使用许多算法,例如"SHA1withRSA"
,"SHA1withRSAAndMGF1"
或者"SHA1withRSA/ISO9796-2"
没有令人满意的结果。
如果我使用相同的消息、相同的算法和相同的私钥,那么 .NET 和 Bouncy Castle 中的结果必须相同......不是吗?我的代码有什么问题???
获取私钥:
...
ks = KeyStore.getInstance("PKCS12");
...
key = ks.getKey(alias, senha.toCharArray());
if (key instanceof PrivateKey) {
privateKey = (PrivateKey) key;
}
签名方式:
public String signer(String txt, String alg) throws Exception {
Signature signer = Signature.getInstance(alg, new BouncyCastleProvider());
signer.initSign(privateKey);
signer.update(txt.getBytes("UTF-8"));
return Base64.encodeToString(signer.sign(), Base64.NO_WRAP);
}
我的应用程序必须使用 XMLDSIG 协议将 XML 发送到政府的 Web 服务。