0

所以我正在尝试编写一个小程序,它使用该javax.smartcardio库从智能卡中读取序列号。智能卡与bit4id读卡器连接,现在我成功连接到智能卡并读取了ATR和协议等基本信息(T = 1)。

我对此做了一些研究(例如: http: //www.cardwerk.com/smartcards/smartcard_standard_ISO7816-4_5_basic_organizations.aspx#table9

但是我没有得到我应该将哪个特定的命令 APDU 列表发送到卡以获取该序列号。有没有一种“简单的方法”可以做到这一点,而无需阅读大量的论文和手册?我想我需要一些数据表来了解数据是如何存储在卡内的,对吧?或者我也可以发送某种命令 APDU 来从卡中检索此信息吗?

现在我只收到 SW=6986 响应(无效命令

任何建议,即使只是在工作流程上,将不胜感激!

4

1 回答 1

1

没有一种方法可以读取智能卡序列号“智能卡”是 7816 规范中定义的 ISO/IEC 标准。许多行业都使用此标准,例如移动 SIM、银行卡和数字签名卡。

该标准的实施因行业而异,一些行业通过自己的附加 APDU 等推进该基本标准,例如移动 SIM 案例中的 3GPP/GSMA 标准或银行中的 EMV 标准。

无论如何,假设这张卡符合智能卡 ISO/IEC 7816 标准,您可能会假设它使用基于文件的存储卡数据。您可以使用“SELECT”命令(在 7816-4 中定义)尝试访问所有可用文件并在那里打印信息。即文件由两个字节标识,例如 3F00,您可以从 0000,0001,0002....FFFF 中进行选择,然后如果您成功选择(状态字 90)然后读取内容并打印它。这样做您可能能够识别哪个文件具有“序列”,然后您只需要继续阅读此文件。

以上并不“容易”,但可能是一个很好的挑战和学习经验。

于 2017-01-25T13:17:56.403 回答