在调用doFinal之前检查RSA密钥是否正确?

时间:2013-04-25 23:34:38

标签: java cryptography rsa encryption

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

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

  

BadPaddingException: Data must start with zero

致电

byte[] signature = cipher.doFinal();

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

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

1 个答案:

答案 0 :(得分: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...
}