python - 智能卡:pyscard 从 apdu 获取剩余字节

标签 python smartcard apdu pyscard

我目前可以正确使用 pyscard 与我的智能卡通信,但是当 apdu 大小超过 255 字节时,我需要接收命令的剩余字节。

什么方法可以获取 pyscard 中的剩余字节?据我了解 sw2 应该是剩余字节数。

def _cmd(self, cl, ins, p1, p2, data=''):
        command = '%02x%02x%02x%02x%02x%s' % (cl, ins, p1, p2, len(data),
                                              data.encode('hex'))

        data, sw1, sw2 = self.reader.transmit(hex2cmd(command))


        return data, sw1 << 8 | sw2

    def _cmd_ok(self, *args, **kwargs):
        data, status = self._cmd(*args, **kwargs)
        if status != 0x9000:
            raise Exception('APDU error: 0x%04x' % status)
        return ''.join(map(chr, data))

最佳答案

您可能指的是 61xx 状态代码,其中 xx 表示仍然可用的字节数。不幸的是,如果您的卡使用 T=0 进行通信,则这只能被认为是理所当然的。然后 GET RESPONSE 将返回下一个数据 block 。一些人主张,同样也应该使用其他通信协议(protocol),但是一旦涉及安全消息传递,特别是使用序列计数器,就会出现严重的问题。

由于适用于任何命令,最简洁的方法是在 APDU 中使用扩展长度规范(如果您的卡支持的话),但这以及最大缓冲区大小必须找出。如果 LC 存在,则使用字节 0、高字节、低字节指定扩展长度,然后使用 LE 指定高字节、低字节。如果没有 LC,则扩展长度指示符(零字节)必须位于两字节 LE 规范之前。有关详细信息(一如既往),请参阅 ISO 7816-4。

关于python - 智能卡:pyscard 从 apdu 获取剩余字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21158527/

相关文章:

Java读卡器终端

java - Windows Servis 应用程序无法识别 RDP session 上的智能卡

android - 如何向 HCE 设备发送命令 APDU?

python - 如何列出 python 模块中可用的所有命令行标志及其作用

python - 如何从 POST 变量保存文件数据并将其加载回 Python Django 中的响应?

python - 在 django-admin 中水平显示 InlineModel 中的一个字段

objective-c - 用于 Objective-C 的 BER-TLV 开源库

Java 卡 : How to load SIM applet to real smart card?

ios - iOS 中的 ADPU 服务

Python 正则表达式 '\s' 与 unicode BOM (U+FEFF) 不匹配