我正在从客户端(c#)签名数据并使用java验证服务器端的签名。
这是我的客户代码
string csrHeaderAndPayload = Convert.ToBase64String(u8.GetBytes(csrHeader)).Replace('+', '-').Replace('/', '_') + "." + Convert.ToBase64String(u8.GetBytes(payload)).Replace('+', '-').Replace('/', '_');
byte [] output = signCsrData(csrHeaderAndPayload , privateKey);
return output;
protected byte[] signCsrData(string csrJSONData, RSAParameters privateKey)
{
byte[] csrData = Encoding.UTF8.GetBytes(csrJSONData);
// byte[] hashData;
RSACryptoServiceProvider rsaCSP = new RSACryptoServiceProvider();
SHA256Managed hash = new SHA256Managed();
rsaCSP.ImportParameters(privateKey);
//hashData = hash.ComputeHash(csrData);
return rsaCSP.SignData(csrData, hash.GetType());
}
和服务器端代码: 从客户端发送MOD和EXP,这里用csrHeaderAndPayload验证csrJSONData(从客户端发送签名)。
BigInteger mod = new BigInteger(Base64.decodeBase64(((String) jpkJson.get(MOD))));
BigInteger exp = new BigInteger(Base64.decodeBase64(((String) jpkJson.get(EXP))));
RSAPublicKeySpec rsaKeyspec = new RSAPublicKeySpec(mod, exp);
publicKey = KeyFactory.getInstance("RSA").generatePublic(rsaKeyspec);
Signature signature = Signature.getInstance(SHA256withRSA);
signature.initVerify(publicKey);
signature.update((csrJSONData).getBytes("UTF-8"));
if (!signature.verify(this.signature)) {
return false
}
此signature.verify始终返回false。 请不要关闭这个问题,已经在其他帖子中看到过解决方案,但没有解决我的问题。