首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >smartcard: pyscard从apdu获取剩余字节

smartcard: pyscard从apdu获取剩余字节
EN

Stack Overflow用户
提问于 2014-01-16 17:58:32
回答 3查看 1.2K关注 0票数 2

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

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

代码语言:javascript
复制
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))
EN

回答 3

Stack Overflow用户

发布于 2014-01-16 21:23:54

您可能指的是61xx状态代码,其中xx表示仍可用的字节数。不幸的是,只有当您的卡使用T=0通信时,这才是理所当然的。然后,GET响应将返回下一块数据。一些人主张,同样也应该使用其他通信协议,但一旦涉及到安全消息传递,尤其是使用序列计数器,就会出现严重的问题。

最干净的方式,因为适用于任何命令,将是在您的APDU中使用扩展长度规范,如果您的卡支持它,但这以及最大缓冲区大小必须找出来。如果存在LC,则使用字节zero、high byte、low byte来指定扩展长度,然后使用LE来指定高字节,低字节紧随其后。如果没有LC,则扩展长度指示符(零字节)必须在双字节LE规范之前。有关详细信息(一如既往),请参阅ISO 7816-4。

票数 1
EN

Stack Overflow用户

发布于 2016-12-20 17:02:32

我知道这是尸检。不管怎么说:

我的方法是不同的:61xx意味着您需要获取额外的xx字节数据。然后,您可以发送

response, sw1, sw2 = connection.transmit([0x00,0xC0,0x00,0x00,0xXX])

以在不轮询90 00ACK的情况下取回0xXX字节。

票数 1
EN

Stack Overflow用户

发布于 2014-01-16 22:19:10

下面是如何做的:

您需要发送一个特殊的APDU来请求剩余数据,并查找状态0x61xx cl,ins,p1,p2,= (0x00,0xa5,0x00,0x00)

代码语言:javascript
复制
def _cmd_ok(self, *args, **kwargs):
        data, status = self._cmd(*args, **kwargs)
        #get high bits
        low = status & 0xFF;
        high = status >> 8;

        if status != 0x9000:
            if high != 0x61:
                raise Exception('APDU error: 0x%04x' % status)
            else:
                while status != 0x9000:
                    part, status = self._cmd(0x00, 0xa5, 0x00, 0x00)
                    data = data + part

        return ''.join(map(chr, data))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21158527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档