【发布时间】:2017-03-10 03:13:33
【问题描述】:
我有这段代码可以用 rsa 加密数据:
private static RSAPrivateKey smartcard_rsa_private = (RSAPrivateKey) KeyBuilder.buildKey(KeyBuilder.TYPE_RSA_PRIVATE, KeyBuilder.LENGTH_RSA_512, false);
private static RSAPublicKey smartcard_rsa_public = (RSAPublicKey) KeyBuilder.buildKey(KeyBuilder.TYPE_RSA_PUBLIC, KeyBuilder.LENGTH_RSA_512, false);
private static Cipher cipher = Cipher.getInstance(Cipher.ALG_RSA_NOPAD, false);
KeyPair kp = new KeyPair(smartcard_rsa_public,smartcard_rsa_private);
kp.genKeyPair();
smartcard_rsa_private=(RSAPrivateKey)kp.getPrivate();
smartcard_rsa_public=(RSAPublicKey)kp.getPublic();
byte[] buffer = apdu.getBuffer();
cipher.init(smartcard_rsa_public, Cipher.MODE_ENCRYPT);
cipher.doFinal(buffer, ISO7816.OFFSET_CDATA, (short) apdu.setIncomingAndReceive(), buffer, (short)0);
我发送以下 APDU:
byte[] data = new byte [64];
new CommandAPDU(0x80, 0x01, 0x00, 0xff, data);
我得到一个错误代码 5,而 doFinal 应该是以下之一:
CryptoException.ILLEGAL_USE 如果满足以下条件之一:
- 此密码算法不填充消息并且消息不 块对齐。
- 此密码算法不填充消息并且不 输入数据已在 inBuff 或通过 update() 方法提供。
- 不支持输入消息长度或消息值为 大于或等于模数。
- 解密的数据不受适当的填充字节限制。
【问题讨论】:
-
您能告诉我们您发送的 APDU 吗?看起来像填充问题。
-
@vojta 我更新了问题
标签: java encryption rsa javacard