我正在尝试使用javax.crypto.Cipher
API创建一个检查数字签名的程序。
只要RSA密钥配对正确,我的程序就能正常工作。但是,当我有一个不正确的密钥试图解密该消息时,我得到一个例外:
BadPaddingException: Data must start with zero
致电
byte[] signature = cipher.doFinal();
我希望能够在调用doFinal
之前检查密钥是否有效,或者,如果失败,则优先退出。我已将doFinal
包装在try / catch块中,尝试关闭我的UDP套接字,但这不起作用。
如果有人能指出我正确的方向,我将非常感激。
答案 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...
}