У меня была проблема с шифрованием DES на Java-карте: я шифрую данные перед отправкой, а затем отправляю их в ответ на запросы, поступающие из какой-либо библиотеки.
Если в одном апплете SELECT
отправляет запросы на информацию, то через 28-30 шифрований на карточке сеанс падает с ошибкой 6F00
. После этого все вызовы шифрования возвращают 6F00
. Проблема исчезнет, если вы сделаете второй выбор апплета.
Все данные перед шифрованием я делаю кратно 8, поэтому ошибку из-за длины сообщения я сразу устранил. Может быть проблема с памятью, но я звоню JCSystem.requestObjectDeletion();
после каждой отправки данных.
Ниже приведена функция инициализации и шифрования, реализованная в моем апплете.
public static void Init()
rw_des_key = (DESKey) KeyBuilder.buildKey(KeyBuilder.TYPE_DES, KeyBuilder.LENGTH_DES3_3KEY, false);
rw_cipherDes = Cipher.getInstance(Cipher.ALG_DES_CBC_NOPAD, false);
rw_des_key.setKey(rwdeskey, (short) 0);
}
public static short RWEncrypt(byte[] msg, short pos, short len, byte[] encMsg, short encPos) throws ArithmeticException, ArrayIndexOutOfBoundsException, ArrayStoreException, ClassCastException, IndexOutOfBoundsException, NegativeArraySizeException, NullPointerException, RuntimeException, SecurityException {
rw_cipherDes.init(rw_des_key, Cipher.MODE_ENCRYPT);
return rw_cipherDes.doFinal(msg, (short) pos, len, encMsg, (short) encPos);}
Если кто-то может сказать, в чем может быть дело, тогда я буду очень признателен!