多个DES_CBC_NOPAD加密中的doFinal出错

时间:2018-05-10 07:52:44

标签: encryption javacard des

我在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);}

如果有人能说出可能是什么情况,那么我将非常感激!

1 个答案:

答案 0 :(得分:0)

我通过在 Cipher.getInstance 函数中将 externalAccess 标志从False更改为True来解决我的问题:

Cipher.getInstance(Cipher.ALG_DES_CBC_NOPAD, true);

这解决了我的问题。