如何在 Android 中读取智能卡 ATR?
Posted
技术标签:
【中文标题】如何在 Android 中读取智能卡 ATR?【英文标题】:How to read smartcard ATR in Android? 【发布时间】:2017-07-20 07:13:17 【问题描述】:我有一个 1443 B 型卡,我可以通过发送 SELECT 命令读取 ATR,文件 ID 为 0x2F01,然后发送 READBINARY 命令
00 B0 00 00 00
这是回复:4301F84703F741E07F6608020205F0020205F09000
但是为什么00 B0 81 00 00
命令不起作用呢?根据 ISO/IEC 7816-4,该命令用于读取 EF 的 5 位 P1xP2 作为文件短 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 中值的定义。这个标准有发布吗?
【问题讨论】:
【参考方案1】:如果您有 ISO/IEC 14443 A 类型卡,那么 ATS 将包含大部分信息,否则这些信息将存储在 ATR 中。在这种情况下,不太可能为卡定义 EF.ATR - 该文件的可用性不是强制性的。
由于缺少 ATS,因此 ISO/IEC 14443 B 型卡更可能存在 EF.ATR。
如果存在 EF.ATR,则可以使用 SELECT by File ID (2F01) 来选择它。当您尝试使用问题中的 READ BINARY 命令时,此文件可能具有短文件标识符 0_0001(5 位二进制),但建议您尝试使用完整的文件 ID 以确定。然后,如果无法读取文件,您只需使用 READ BINARY 或 GET DATA 读取文件。
【讨论】:
我已经编辑了我的问题。你能看到吗@Maarten Bodewes @Maarten 你能帮我解决这个问题吗***.com/questions/51558845/…【参考方案2】:与此同时,android 9 提供了SEService。在Reader 上获得具有getUiccReader
的读者后,可以打开一个会话。 Session 有一个方法 getATR
。
【讨论】:
以上是关于如何在 Android 中读取智能卡 ATR?的主要内容,如果未能解决你的问题,请参考以下文章