如何在Android中阅读智能卡ATR?

时间:2017-07-20 07:13:17

标签: android smartcard apdu

我有一张1443型B卡,我可以通过发送SELECT命令读取ATR,文件ID为0x2F01,然后发送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
但我找不到上面提到的第12节7816-4。因此,我无法澄清返回的ATR中值的定义,尽管我现在可以成功读取ATR。该标准是否已发布?

2 个答案:

答案 0 :(得分:1)

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

对于ISO / IEC 14443 B类卡,更有可能存在EF.ATR,因为缺少ATS。

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

答案 1 :(得分:0)

与此同时,Android 9 提供了 SEService。在 Reader 上获得带有 getUiccReader 的读者后,可以打开会话。 Session 有一个方法 getATR