0

我正在尝试创建一个使用javax.crypto.CipherAPI 检查数字签名的程序。

只要 RSA 密钥正确配对,我的程序就可以正常工作。但是,当我有一个不正确的密钥试图解密消息时,我得到了一个异常:

BadPaddingException: Data must start with zero

打电话给

byte[] signature = cipher.doFinal();

我希望能够在调用之前检查密钥是否有效doFinal,或者如果失败,则优雅地退出。我已经将它包装doFinal在一个 try/catch 块中,以尝试关闭我的 UDP 套接字,但这不起作用。

如果有人能指出我正确的方向,我将不胜感激。

4

1 回答 1

1

您应该使用Signature该类来处理 RSA 签名验证。

Signature sig = Signature.getInstance("SHA256withRSA"); // Adjust as necessary
sig.initVerify(publicKey);
sig.update(dataThatWasSigned);

try {
  boolean validSignature = sig.verify(signatureYouReceived);
} catch (SignatureException e) {
  // Graceful handling belongs here...
}
于 2013-04-26T07:25:28.830 回答