【发布时间】:2012-10-04 05:46:46
【问题描述】:
我正在向小程序发送一个没有 CMAC(CLA 字节 = 0x80)的 APDU。我正在使用 SCP02 i55。我需要使用SecureChannel.encryptData() 函数加密数据。我不想手动加密它,我需要 Global Platform 加密数据,然后我将使用正确的会话密钥对其进行解密(我确信它们是经过精心计算的)。
我正在使用以下代码来加密 APDU 缓冲区。
byte buffer = apdu.getBuffer();
buffer[0] = 20;
short lc = chan.encryptData(buffer, (short) 0, (short) 1);
apdu.setOutgoingAndSend((short) 0, lc);
这会引发安全状态不满足异常 (0x6982),在该异常中,我期望响应 APDU 带有加密 20。
我做错了什么?
【问题讨论】:
-
信息太少了。您使用的是哪种安全消息传递协议?你如何加密?您自己计算会话数据加密密钥吗?
-
因为 bra_racing 没有返回其他信息而被否决。
-
抱歉没有接听,但我正在度假,无法上网。我正在使用 scp02,i = 55 我不想手动加密,我需要 globalplatform 加密数据,然后我将使用正确的会话密钥对其进行解密(我确信它们计算得很好)非常感谢
-
@martijno 好的,我要写一个例子。我有一个向我的小程序发送 APDU 的主类。当小程序接收到 APDU 时:
buffer[ISO7816.OFFSET_CDATA] = 20;apdu.setOutgoingAndSend((short) 0, (short) 1); -
对不起@martijno,正确的代码是:
byte buffer = apdu.getBuffer();buffer[ISO7816.OFFSET_CDATA] = 20;short lc = chan.encryptData(buffer, (short) 0, (short) 1);apdu.setOutgoingAndSend((short) 0, lc);谢谢
标签: encryption javacard