Я разрабатываю апплет JavaCard. Апплет генерирует RSA открытых и закрытых ключей в конструкторе и с помощью команды шифруют APDU некоторый массив байтов:JavaCard-апплет не работает с шифрованием RSA
public RSATestApplet() {
keyPair = new KeyPair(KeyPair.ALG_RSA_CRT, KeyBuilder.LENGTH_RSA_2048);
keyPair.genKeyPair();
rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
cipher = Cipher.getInstance(Cipher.ALG_RSA_PKCS1, false);
register();
}
И основной метод является:
private void encryptData(APDU apdu) {
if (!rsaPublicKey.isInitialized()) {
ISOException.throwIt(ISO7816.SW_CONDITIONS_NOT_SATISFIED);
}
byte[] apduBuffer = apdu.getBuffer();
apdu.setIncomingAndReceive();
cipher.init(rsaPrivateKey, Cipher.MODE_ENCRYPT);
byte[] encryptedBuffer = new byte[apduBuffer.length];
Util.arrayFillNonAtomic(encryptedBuffer, (short) 0,
(short) encryptedBuffer.length, (byte) 0xAA);
cipher.doFinal(encryptedBuffer, (short) 0, (short) encryptedBuffer.length, apduBuffer, (short) 0);
// Just for testing send 120 bytes
apdu.setOutgoingAndSend((short) 0, (short) 120);
}
И когда я пытаюсь установить ответ апплет APDU является 6E00 (который означает: нет точного диагноза).
Я думаю, проблема может возникнуть, когда шифр.doFinal() выполняется.
Я пробовал с другими апплетами, и все работает нормально.
я компилирую мой апплет с JavaCard 2.2.1 и Java 1.2
Есть ли у вас какие-либо идеи, что происходит?
Здравствуйте! Благодарим вас за полезные советы. Я уже понял, что моя карта не поддерживает RSA_2048. Но в документации RSA_2048 поддержка в DDA, а не в SDA. Дело в том, что я не знаю, что такое DDA и SDA, и как установить апплет в этом режиме. Я задам вопрос i – raiym
http://stackoverflow.com/questions/33015169/differents-between-sda-and-dda-in-javacard – raiym