从比利时EID卡读取图像

时间:2019-08-29 09:37:05

标签: uwp smartcard apdu smartcard-reader eid

使用卡上的APDU命令读取EF(ID#RN)文件时,一切都很好。 但是,当我尝试读取图像文件EF(ID#Photo)时,图像将被裁剪。我只能正确读取前510-512字节。

文件读取操作始终返回90-00-成功响应。因此,我将文件大小设置为3064字节以停止读取操作。

已在Google网上论坛中阅读到它可能与交易相关的信息。但是我的平台是UWP,Windows.Devices.SmartCards名称空间中不支持事务。可以确定卡上的图像没有损坏(可以通过第三方软件读取)。

我的代码与下一个example中的readBinary方法非常相似:

这里是:

        List<byte> resultBytes = new List<byte>();
        byte offset = 0x00;
        byte size = 0xFF;

        var fileBytes = await GetBytes(card, new byte[] { 0x00, 0xB0, (byte)(offset >> 8), (byte)(offset & 0xFF), size });

        if (fileBytes[0] == 0x6C)
        {
            size = fileBytes[1];
            fileBytes = await GetBytes(card, new byte[] { 0x00, 0xB0, (byte)(offset >> 8), (byte)(offset & 0xFF), size });
        }

        while (fileBytes[fileBytes.Length - 2] == 0x90 && fileBytes[fileBytes.Length - 1] == 0x00)
        {
            if (resultBytes.Count >= maxSize && maxSize > 0) break;

            var newBytes = fileBytes.ToList();
            newBytes.RemoveRange(fileBytes.Length - 2, 2);
            resultBytes.AddRange(newBytes);

            if (maxSize > 0 && resultBytes.Count > maxSize - size) size = (byte)(maxSize - resultBytes.Count);

            offset = (byte)(offset + size);

            fileBytes = await GetBytes(card, new byte[] { 0x00, 0xB0, (byte)(offset >> 8), (byte)(offset & 0xFF), size });

            if (fileBytes[0] == 0x6C)
            {
                size = fileBytes[1];
                fileBytes = await GetBytes(card, new byte[] { 0x00, 0xB0, (byte)(offset >> 8), (byte)(offset & 0xFF), size });
            }
        }

        return resultBytes;

1 个答案:

答案 0 :(得分:0)

我想这行:

offset =  (byte)(offset + size) 

是问题所在。如果转换为字节,偏移量如何增加?