我有1443型B卡,可以通过发送SELECT命令(文件ID为0x2F01)来读取ATR,然后发送READBINARY命令

00 B0 00 00 00
这是响应:
4301F84703F741E07F6608020205F0020205F09000

但是为什么命令00 B0 81 00 00不起作用?根据ISO / IEC 7816-4,此命令用于读取具有5位P1xP2的EF作为文件短ID(00001),并且Le = 0x00指定需要读取文件的所有字节。
我想念什么吗?如何读取具有短ID的文件?

关于返回的ATR,在SC17_N5781_ISO_IEC_FDIS_7816-62_Identification中定义。它表明:

标签43->信用卡服务数据
长度01-> 1字节
值F8->参见ISO / IEC 7816-4 12.1.1.5

标签47->卡功能
长度03-> 3个字节
值F7 41 E0->参见ISO / IEC 7816-4 12.1.1.9

标签7F66->扩展长度APDU
长度08-> 8字节
值->参见ISO / IEC 7816-4 12.7.1
标签02
长度02
价值05 F0
标签02
长度02
价值05 F0
但是我找不到上面提到的7816-4第12节。因此,尽管我现在可以成功读取ATR,但无法澄清返回的ATR中值的定义。该标准发布了吗?

最佳答案

如果您有ISO / IEC 14443 A型卡,则ATS将包含大多数存储在ATR中的信息。在这种情况下,不太可能为卡定义EF.ATR-此文件的可用性不是强制性的。

EF.ATR对于ISO / IEC 14443 B型卡更可能出现,因为ATS将丢失。

如果存在EF.ATR,则可以使用按文件ID(2F01)进行的选择来选择它。在问题中使用READ BINARY命令尝试时,此文件可能具有短文件标识符0_0001(5位二进制),但为确保确定,建议您尝试使用完整文件ID。然后,如果无法执行读取文件,则只需使用READ BINARY或GET DATA读出文件。

关于android - 如何在Android中读取智能卡ATR?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45207788/

10-12 01:38