【发布时间】:2015-12-29 12:56:38
【问题描述】:
我正在为 ISO 7816 卡编写一个智能卡程序,我需要更新一条记录。我用JAVA和javax.smartcardioLibrary编写程序。
我用这个命令选择文件:ins = 0xA4
我可以用这个命令读取记录:cla = 0x80,ins = 0xB2,p1 = 0x00,p2 = 0x00,le = 90
读取记录正确并发送给我90 00。
现在我需要更新这条记录。所以我使用这个命令:cla = 0x80,ins = 0xDC,p1 = 0x00,p2 = 0x00,还有一些数据。
但在响应 APDU 时,我收到 6D 00 错误,这意味着“不支持 Ins 值”。
如何正确更新记录?
【问题讨论】:
-
这是什么卡?为什么您希望记录是可写的(使用此命令/无需身份验证/根本)?
-
@MichaelRoland 这是 ISO 7816-4 智能卡...我有用于读取卡数据的程序的源代码...我想我可以更改命令来更改数据这个文件……但这不是身份验证问题,因为错误是关于 ins 值的……这不可能吗?
-
ISO/IEC 7816-4 是定义智能卡数据结构和一组命令的标准,它不是智能卡产品。智能卡可能遵循 ISO/IEC 7816-4 的部分,但通常不会实现所有命令。具体来说,您的卡支持的命令(CLA=
80, INS=B2)是不遵循 ISO/IEC 7816-4 标准的专有命令(CLA=80表示专有类)。您需要获取有关智能卡芯片(以及可能在其上运行的应用程序)的更多信息,以确定是否(以及如何)修改芯片上的数据结构。 -
您可以分析 ATR 并猜测智能卡类型。
-
为了快速检查,您可以尝试 Write Record (INS=0xD2) 而不是 Update Record (INS=0xDC)