验证 JavaCard 上签名的数据时出现 Java BadPaddingException

问题描述 投票:0回答:2

我正在使用密码在 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,不是吗?我被困在如何消除错误上。

编辑:为了清晰起见,更改加密和解密以签名和验证

java encryption padding javacard badpaddingexception
2个回答
0
投票

也许这会有所帮助:javax.crypto.Cipher 用于 RSA 的填充。总之,不要依赖默认值,最好完全限定密码。


0
投票

您的证书可能不是自动签名的。 您可能已使用私钥进行签名并尝试使用 CA 证书而不是实际的公钥证书进行验证。

为了使签名验证正常工作,请尝试使用私钥及其关联的公钥证书(而不是其 ca 证书)的组合

我能够重现您的异常,因此分享我的经验: “javax.crypto.BadPaddingException:解密时填充错误”

© www.soinside.com 2019 - 2024. All rights reserved.