原创 操作卡片文件命令--选择文件(SELECT)

2008-12-7 22:46 7881 8 8 分类: 软件与OS
 1、命令功能描述

    选择文件命令是通过文件名来选择卡内的DDF、ADF,由于DF和应用相对应,所以选择文件的过程也是一个选择应用的过程。

    一般的,卡片支持在任何条件下选择MF;在卡片全局范围内和当前子文件范围内选择DF等操作。

    如果选择文件成功的话,卡片将自动将选中的DF置为当前文件,同时进行相应的安全环境设置。

    在复位应答完成之后,卡片自动执行选择MF命令,将MF置为当前文件。

  2、命令报文格式

    命令的APDU内容如下所示:

      代码              值
       CLA                 0x00
       INS                 0xA4
       P1                  应用控制参数
       P2                  0x00或者0x02
       Lc                  Data域的数据长度
       Data                文件名
       Le                  0x00

    其中:

    * P1=0x00表示选择MF,这时数据域为空;P1=0x04表示选择DF,这里数据域为DF的文件名。
    * P2=0x00表示选择满足条件的第一个或者是仅有的一个文件;P2=0x02表示选择满足条件的下一个文件。选择结果为多个文件时表示卡片能够支持部分文件名选择,这个功能可以根据情况选择实现。
    * 如果选择采用FID进行选择时,DATA域为DF的FID,长度为2Byte,即Lc=2;如果选择采用AID进行选择时,DATA域为DF的AID,长度为0x05-0x10。
    * 通过FID选择文件时,只在当前DF的子文件中查询,通过AID选择文件时,可以在整个文件系统中查找。

  3、响应报文数据

    如果卡片不支持金融应用的话,或者卡片支持的应用没有特殊要求的话,响应报文数据可以没有或者根据应用需求定义。

    以下给出在金融应用中要求的响应报文数据的示例,在金融应用规范中定义,在其他应用实现中可以参考。

    响应报文包含所选择的文件的文件控制信,即FCI信息。

    如果选择的是DDF文件的话,回送的FCI信息格式如下所示:

    FT   FTL   DT   DTL   DN   ST   STL   RT   RTL   RF

    其中:

    * FT:表示信息格式采用的是FCI模板,固定值为0x6F。
    * FTL:表示FCI数据长度,从DT开始计算到RF为止。
    * DT:表示DF文件名标识,固定值为0x84。
    * DTL:表示DF文件名长度,也就是DN的长度。
    * DN:表示DF名,也就是选中的DDF的AID。
    * ST:表示FCI专用数据模板,固定值为0xA5。
    * STL:表示FCI专用数据长度,从RT开始计算到RF为止。
    * RT:表示目录文件的SFI标识,固定值为0x88。
    * RTL:表示目录文件SFI的长度,也就是RF的长度。
    * RF:表示目录文件的SFI,也就是被选中DDF下DIR文件的SFI。

    如果选择的是ADF文件的话,回送的FCI信息格式如下图所示:

    FT   FTL   DT   DTL   DN   ST   STL   IT   ITL   IF
     
    其中:

    * FT:表示信息格式采用的是FCI模板,固定值为0x6F。
    * FTL:表示FCI数据长度,从DT开始计算到IF为止。
    * DT:表示DF文件名标识,固定值为0x84。
    * DTL:表示DF文件名长度,也就是DN的长度。
    * DN:表示DF名,也就是选中的ADF的AID。
    * ST:表示FCI专用数据模板,固定值为0xA5。
    * STL:表示FCI专用数据长度,从IT开始计算到IF为止。
    * IT:表示发卡方自定义数据的FCI标识,固定值为0x9F0C。
    * ITL:表示发卡方自定义数据的FCI的长度,也就是IF的长度。
    * IF:表示发卡方自定义数据,通常这个数据在金融应用定义的基本文件中。

  4、响应报文状态码

    此命令执行成功的状态码为0x9000。

       SW1     SW2      含义
       0x62     0x83        选择的文件无效
       0x62     0x84        PCI格式与P2指定的不一致
       0x64     0x00        没有改变标志状态位
       0x67     0x00        P1、P2和Lc不一致
       0x69     0x85        使用条件不满足
       0x6A     0x80        数据错误
       0x6A     0x81        不支持此功能
       0x6A     0x82        文件没有找到
       0x6A     0x86        P1、P2不正确
       0x6D     0x00        INS错误
       0x6E     0x00        CLA错误
       0x93     0x03        DF对应的应用永久锁定

  5、命令实现的其他要求

    选择文件命令实现上比较灵活,根据文件系统的不同差异很大。

    对于FCI文件处理部分,通常可以在命令执行阶段临时组织FCI数据返回,也可以在每一个DF创建时同时建立一个FCI文件,将FCI信息写入文件中,在执行选择文件命令以后直接返回该文件的数据内容即可。

    对于部分文件名选择,进行模糊查询时,需要在卡内维护一个状态机,支持卡外逐一检索查询结果,具体实现的格式可以自定义。

  6、命令实现说明

    选择文件命令包括了3个层次。

    * 首先是命令执行条件的检查,是否能够执行指定操作。
    * 其次是按照查询条件的检索,得到查询的结果。
    * 最后是按照查询结果的情况返回相应的信息。

    命令执行完成以后,对卡内和安全相关的标志位影响较大。

  7、命令使用示例

   (1)预设环境

    对于CREATE FILE命令创建的文件系统,应依次选择MF和ADF文件。

   (2)命令报文

    选择MF的APDU:

    00 A4 00 00 00

    其中:

    * 00 表示SELECT命令的CLA。
    * A4 表示SELECT命令的INS。
    * 00 表示SELECT命令的P1,表示是对MF的选择。
    * 00 表示SELECT命令的P2。
    * 00 表示SELECT命令无数据。

    选择DF的APDU:

    00 A4 04 00 02 4F 00

    其中:

    * 00 表示SELECT命令的CLA。
    * A4 表示SELECT命令的INS。
    * 04 表示SELECT命令的P1,表示是对DF的选择。
    * 00 表示SELECT命令的P2。
    * 02 表示SELECT命令数据域长度。
    * 4F00 表示被选择DF的FID。

   (3)SELECT响应报文

    卡片处理以后,SELECT的响应报文可以根据应用的具体情况决定。
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条