我正在尝试创建一个程序,该程序将使用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...
}