当前位置: 首页 > 知识库问答 >
问题:

当要检索的数据超过256字节时,卡不返回状态字

秦学林
2023-03-14

我正在使用T=0协议中的卡:

>

00 C0 00 XX

关于ISO7816-3,我希望该卡能给出以下回应:

Procedure byte | Data | SW1 SW2

如果SW1==0x61,我会发送:

00 C0 00 00 SW2

以此类推,直到最后我得到了9000

然而,这是我实际拥有的(TPDU级别):

> Command
< 61 00

> 00 C0 00 00 00
< C0 (procedure byte)
< Data (256)
No Status Word, no procedure byte (timeout)

> 00 C0 00 00 00
< C0 (procedure byte)
< Data (256)
No Status Word, no procedure byte (timeout)

[...]

> 00 C0 00 00 00
< 61 39 (status word)

我必须反复发送P3=00(256)的GET响应,读取256个字节,并且没有状态字,直到卡警告我实际读取的字节数少于256。

我找不到规范中允许卡“跳过”状态词的部分,或者如何处理超过256字节的答案。有指针吗?

共有2个答案

姬和歌
2023-03-14

在T=0协议中,数据不可能超过256字节。

在你的情况下,这可能是一个错误(或误解)的协议,你的应用程序检索256字节后,它仍然发送61XX回来。

实际上你的日志中并不清楚你的GET RESPONSE命令的状态字是什么,如果是9000,那么一切都很好,没有更多的讨论。在这种情况下,如果你重复GET RESPONSE命令,你可能会再次得到最新的数据!

只需回答您的具体问题:

我找不到规范中允许卡“跳过”状态字的部分

你可以忽略它!

我的意思是,如果卡通知它有一些可用数据(61 XX),而您没有发送任何GET响应命令,而是发送另一个命令,那么数据将丢失。

或者如何处理长度超过256字节的答案。有指针吗?

在协议T=0中是不可能的。您最好使用协议T=1或T=15来代替。

或者你可以通过一个稍微增强的协议来解决这个问题,然后你应该重写这个应用来支持它(如果这个应用是你的),它可能不再是标准的了!

红砚文
2023-03-14

我想通了:这是一个时间问题。

该卡确实有一个状态字要发送,但是我在读取操作之间的过程太长,所以在我请求时,它在卡中不再可用。

我应该强调一下,我是在自己开发读者部分。

 类似资料:
  • 我正在用RSA私钥加密我的对称密钥(AES),并用我的公钥解密它。 但是,当我加密数据时,字节长度是16字节,然而,当我解密数据时,它抛出了受影响的错误,解密时字节数据的长度是344。

  • 我使用rsa密钥加密一个长字符串,并将它发送到我的服务器(将使用服务器的公钥和私钥加密它),但它会引发类似我觉得到目前为止我还没有正确理解rsa的工作方式(使用内置库是造成这种情况的原因)。 有人能解释为什么会引发此异常吗?难道根本不可能发送加密的长字符串吗?

  • 问题内容: 我正在使用rsa密钥对要发送到服务器的长字符串进行加密(将使用服务器的公钥和我的私钥对它进行加密),但是它抛出一个异常,就像 我觉得到目前为止我还不了解rsa的工作原理一样(使用内置库是造成这种情况的原因)。 可以请一个人解释为什么抛出此异常。根本不可能发送加密的长字符串吗? 问题答案: RSA算法只能加密具有以字节为单位的RSA密钥长度的最大字节长度除以8减去11的填充字节的数据,即

  • 问题内容: 我正在尝试测试Express.js控制器,但是每隔一段时间我就会碰到mocha超时提示我的问题。 文档(https://mochajs.org/#working-with-promises) 我用Promises包装了Express控制器,以便随后可以在测试中将它们返回。 我有一个基本测试,可以运行以始终得到错误消息: 我得到的错误是: 我不明白为什么会出现错误,因为我正在返回确实解决

  • 问题内容: 我正在尝试使用javax.smartcardio 读取智能卡(德语Gesundheitskarte) 在EF“ PD” 的定义中,其长度指定为850字节。内容应该是一个gzip压缩的ISO5589-15编码的XML字符串作为指定在这里 作为CommandAPDU,我发送 获取前256个字节。发送后 我得到下一个256个字节。 但是我如何得到其余的呢? 我怎么知道二进制数据何时结束? 德