请求者在Java中使用自己的私钥进行签名。
public static String signHash(PrivateKey privateKey, byte[] hash)
throws NoSuchAlgorithmException, InvalidKeyException, SignatureException, UnsupportedEncodingException {
Signature privateSignature = Signature.getInstance("SHA256withRSA");
privateSignature.initSign(privateKey);
privateSignature.update(hash);
byte[] signature = privateSignature.sign();
return Base64.getEncoder().encodeToString(signature);
}接收方无法验证其签名。我们在.NET中使用bouncyCastle进行验证。
public bool VerifySignature(AsymmetricKeyParameter pubKey, byte[] signature, byte[] msg)
{
try
{
ISigner signer = SignerUtilities.GetSigner("SHA-256withRSA");
signer.Init(false, pubKey);
signer.BlockUpdate(msg, 0, msg.Length);
return signer.VerifySignature(signature);
}
catch (Exception exc)
{
Console.WriteLine("Verification failed with the error: " + exc.ToString());
return false;
}
}发布于 2020-10-30 21:49:34
public static String signHash(PrivateKey privateKey, byte[] hash)这不是签名在Java语言中的工作方式,您提供的是消息而不是散列,因此假设数据在Java语言中被散列了两次,并且在使用C#中的Bouncy Castle进行验证时只被散列了一次。
https://stackoverflow.com/questions/64609610
复制相似问题