gpt4 book ai didi

encryption - 多重 DES_CBC_NOPAD 加密的 doFinal 错误

转载 作者:行者123 更新时间:2023-12-04 01:56:27 31 4
gpt4 key购买 nike

我在 Java Card 上使用 DES 加密时遇到问题:我在发送数据之前加密数据,然后将其作为对来自某个库的请求的响应发送。

如果在一个小程序中 SELECT 发送信息请求,则通过卡上的 28-30 次加密, session 失败并出现错误 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);}

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

最佳答案

当对象中的外部访问(externalAccess)标志为假但相应的对象被共享接口(interface)调用时,就会出现此问题。

例如(来自您的代码):-

rw_cipherDes = Cipher.getInstance(Cipher.ALG_DES_CBC_NOPAD, false);

此处外部访问标志为 False,即您指示 Cipher API 向任何外部应用程序提供密码对象的访问(这是针对通过可共享接口(interface)调用此 API 的情况) .

因此,当通过可共享接口(interface)跨应用程序调用时,以下行将生成安全异常(因此为 SW 6F00)。

return rw_cipherDes.doFinal(msg, (short) pos, len, encMsg, (short) encPos);}

显然,当您从它自己的应用程序调用相同的 API 时,它会正常工作。

解决方案是允许对象使用 externalAccess (true)。这将使它可以通过共享界面访问。

rw_cipherDes = Cipher.getInstance(Cipher.ALG_DES_CBC_NOPAD, true);

关于encryption - 多重 DES_CBC_NOPAD 加密的 doFinal 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50268138/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com