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

标签 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 Data XX,我再次得到 61XX。

我用java等工具检查了卡,确认卡上没有任何东西。

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

最佳答案

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

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

这是 reference of the command .

关于c++ - 如何在 C++ 中使用单个 APDU 发送和获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17968261/

相关文章:

Mifare Desfire 包裹模式 : How to calculate CMAC?

c++ - Apache Thrift : When use "optional' before a list, C++ 服务器似乎没有正确返回它

c++ - 读取空格会使解析器崩溃。为什么?

c++ - 在 C++ 中使用直接访问文件

c# - 谜团: 4 Bytes should represent a Date,可是怎么回事?

java - 将 ECPublicKey 从 JavaCard 恢复到 Java

c++ - 如何使用 Boost.Filesystem 检查两个路径是否指向同一个文件/目录

python - RFID应答卡没有唯一的atr

黑莓智能卡读卡器示例

smartcard - 如何解释 GET PROCESSING OPTIONS 的响应?