我正在尝试创建一个程序,该程序将使用javax.crypto.Cipher API检查数字签名。

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


BadPaddingException: Data must start with zero


在致电

byte[] signature = cipher.doFinal();


我希望能够在调用doFinal之前检查该键是否起作用,否则,请正常退出。我已经将doFinal包裹在try / catch块中,以尝试关闭UDP套接字,但这不起作用。

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

最佳答案

您应该使用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...
}

10-08 02:07