我在Java Card上遇到DES加密问题:我在发送数据之前加密数据,然后将其作为对来自某些库的请求的响应发送。
如果在一个小程序SELECT
中发送了信息请求,那么通过卡上的28-30次加密,会话就会出现错误6F00
。之后,所有加密调用都返回6F00
。如果您再次选择小程序,问题就会消失。
加密前的所有数据,我做了8的倍数,所以由于消息的长度我立即消除了错误。可能存在内存问题,但每次发送数据后都会调用JCSystem.requestObjectDeletion();
。
以下是我的Applet中实现的初始化和加密功能。
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);}
如果有人能说出可能是什么情况,那么我将非常感激!
答案 0 :(得分:0)
我通过在 Cipher.getInstance 函数中将 externalAccess 标志从False更改为True来解决我的问题:
Cipher.getInstance(Cipher.ALG_DES_CBC_NOPAD, true);
这解决了我的问题。