使用javax.smartcardio从智能卡读取序列

时间:2016-12-27 10:21:11

标签: io applet smartcard apdu javax

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

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

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

现在我只收到SW = 6986回复(无效命令

任何建议,即使只是在工作流程上,也会非常感谢!

1 个答案:

答案 0 :(得分:1)

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

该标准的实施在整个行业中是不同的,一些行业推进这一基本标准,其中有自己的附加APDU等,如移动SIM案例中的3GPP / GSMA标准或银行业务中的EMV标准。

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

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