我有這樣的代碼將數據與RSA加密:JavaCard的RSA密碼DoFinal異常
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
@vojta我更新了問題 – Florian