我在Android上使用Bouncy Castle的"SHA1withRSA"
签名存在问题: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发送到政府的网络服务。
答案 0 :(得分:3)
被签名的值可以有一些随机的填充数据(你的签名在一边总是相同的吗?)。您应该在一侧生成签名并尝试在另一侧进行验证。
以下算法尤其如此:
"SHA1WITHRSAANDMGF1"
"SHA224WITHRSAANDMGF1"
"SHA256WITHRSAANDMGF1"
"SHA384WITHRSAANDMGF1"
"SHA512WITHRSAANDMGF1"
安装Bouncy Castle提供程序,看看是否可以使用公钥验证签名。