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



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

我使用java和其他工具检查了卡,并验证了卡上没有任何东西。

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

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

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

这是命令的参考。