我正在使用密码在 JavaCard 上签署一些数据,然后将其输出到文本文件中,将其读入 java 程序并尝试验证它。我不断收到 BadPaddingException。
我在我的 JavaCard 小程序上像这样签名:
Cipher cipher = Cipher.getInstance(Cipher.ALG_RSA_PKCS1, false);
cipher.init(key.getPrivate(), Cipher.MODE_ENCRYPT);
short sigCipherLength = cipher.doFinal(inputArray, inputOffset, inputLength, outputArray, outputOffset);
并像这样验证它(在我的 Java 程序上):
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, publicKey);
byte[] decryptedText = cipher.doFinal(inputArray);
当将 Cipher.getInstance 与“RSA”一起使用时,它默认为 RSA/ECB/RKPCS1Padding,不是吗?我被困在如何消除错误上。
编辑:为了清晰起见,更改加密和解密以签名和验证
也许这会有所帮助:javax.crypto.Cipher 用于 RSA 的填充。总之,不要依赖默认值,最好完全限定密码。
您的证书可能不是自动签名的。 您可能已使用私钥进行签名并尝试使用 CA 证书而不是实际的公钥证书进行验证。
为了使签名验证正常工作,请尝试使用私钥及其关联的公钥证书(而不是其 ca 证书)的组合
我能够重现您的异常,因此分享我的经验: “javax.crypto.BadPaddingException:解密时填充错误”