1

"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 服务。

4

1 回答 1

3

被签名的值可以有一些随机填充数据(你的签名在一侧总是相同的吗?)。您应该在一侧生成签名并尝试在另一侧进行验证。

对于以下算法尤其如此:

"SHA1WITHRSAANDMGF1"
"SHA224WITHRSAANDMGF1"
"SHA256WITHRSAANDMGF1"
"SHA384WITHRSAANDMGF1"
"SHA512WITHRSAANDMGF1"

安装 Bouncy Castle 提供程序并查看是否可以使用公钥验证签名。

于 2013-01-13T13:17:11.287 回答