Java Card APDU 中建议的数据字段大小是多少?来自陈志群的Java Card Technology for Smart Cards: Architecture and Programmer's Guide
书中提到,Le 字段最多允许 255。
我们是否将 APDU 命令解释如下:
|<----------------------- 255 Bytes total ------------------------>|
|<- CLA -><- INS -><- P1 -><- P2 -><- Lc -><---- DATA ----><- Le ->|
因此,如果 CLA、INS、P1、P2、Lc、Le 均为 1 字节,我们应该假设我们只能安全地将 249 字节设置到 DATA 区域?
对于 APDU 响应,我们解释为:
|<----------------------- 258 Bytes total ------------------------>|
|<-------------------------- DATA ------------------------><- SW ->|
响应数据可以安全地设置为 256 字节,其中包含 2 字节的 SW,并且由数据响应和 SW 组成的响应总计为 258 字节?
考虑到我们必须面对不可能进行链接并且我们必须自己手动处理数据流的情况,安全地发送和接收块数据还有哪些其他考虑因素?
据我所知Le
字段允许 1-256 字节(255 的限制是为了Lc
)引用ISO 7816-3:
Case 2S — 短 Le 字段由 C(5) 组成,编码 Ne 从 1 到
256('00'表示最大,256)......
....
案例 4S ⎯ ...短 Le
字段由 C(6+Nc) 组成,编码 Ne 从 1 到 256(“00”表示
最大,256)...
(并且它符合你的“Response APDU”长度256+2,也许这只是一个错字)
255 字节的限制是针对“Command APDU”的 DATA 部分。因此,对于整个非扩展长度“命令 APDU”,限制应该是5+255+1
.
所有这些限制均在中精确定义ISO 7816-3——看这里。
请注意,javacard 的 APDU 缓冲区might更小。来自 javadocAPDU
class:
缓冲区长度(即 APDU 缓冲区)必须至少为 133 个字节(5 个字节的标头和
128字节数据)
因此,要读取长度超过 128 字节的传入数据,您可能需要调用APDU.receiveBytes()
获取剩余的不适合的字节。
相同might申请发送数据(即APDU.sendBytes()
might需要发送更长的数据)。
对于应用程序级别框架,我知道这些方法(可能会鼓舞人心):
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)