如何使用C ++中的单个APDU发送和获取数据?

时间:2013-07-31 10:46:29

标签: c++ smartcard apdu winscard

我正在使用winscard编写C ++代码。我注意到,如果我用Scardtransmit发送命令,其中只发送数据或仅接收数据,则没有问题。我可以发送数据或得到正确的答复。 但是,当命令发送数据并期望响应时,我总是得到61xx。我知道错误代码61xx意味着有一个xx字节响应,其中Le不正确,并检查每个可能的Le,包括返回值xx,但没有任何变化。例如,让Apdu采用CLA INS P1 P2 Lc Data Le的形式,然后我得到61XX,然后我发送CLA INS P1 P2 Lc数据XX,再次得到61XX。

我使用java和其他工具检查了卡片,并确认卡片没有任何内容。

据我所知,有一个字节P3分配给Lc和Le。有没有办法从DATADATA命令获得响应(除了SW1SW2)?

1 个答案:

答案 0 :(得分:4)

当您发送具有命令数据的命令并且命令也期望结果数据,并且使用T = 0协议进行通信时,则需要发送两个APDU。一个用于命令本身,另一个用于检索结果。

61XX不是错误。这是一个(成功的)状态字,表示您有XX个字节的响应,您可以使用GET RESPONSEINS=0xC0)来检索。

这是reference of the command