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

loading...


1

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

  • 我向卡发送命令,请求对数据进行响应 .

  • 我使用的小程序应该用数据 potentially more than 256 bytes 来回答,所以在命令Le中设置为'00'

  • 卡首先回答 61 XX ,其中'XX'是要读取的字节数(从1到256) .

  • 然后我通过发送GET RESPONSE命令检索数据:

00 C0 00 00 XX

期望:

关于ISO7816-3,我预计该卡会回复:

Procedure byte | Data | SW1 SW2

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

00 C0 00 00 SW2

等等,直到最终我得到 90 00 .

现实:

但是,这就是我实际拥有的(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)

我必须重复发送GET RESPONSE,P3 = 00(256),读取256个字节并且没有状态字,直到卡警告我实际上读取的字节少于256个字节 .

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

loading...

2回答

  • 1

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

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

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

    只是回答您的具体问题:

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

    你可以简单地忽略它!

    我的意思是如果卡通知它有一些可用的数据(61 XX)并且您不发送任何GET RESPONSE命令但是另一个命令则数据将丢失 .

    或如何处理超过256个字节的答案 . 任何指针?

    在协议T = 0中,这是不可能的 . 您最好使用协议T = 1或T = 15 .

    或者你可以通过一些增强的协议以某种方式解决它,然后你应该重写应用程序以支持它(如果应用程序是你的),它可能不再是标准!


  • -1

    我想通了:这是一个 timing 问题 .

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

    我应该强调我自己正在开发阅读器部分 .

评论

暂时没有评论!