刚开始接触CPU卡的时候,对于各种文件、应用的定义容易模糊不清,通常不能准确地界定什么是文件?什么是应用?DF和EF的区别真的就像计算机里的目录和文档那样吗?FID、AID、SFI这些概念都在什么时候派上用场?一个EF必须依存于某个DF吗?MF是必须存在的吗?脑海里会有无数个问号奔腾而来。

  其实文件的本质就是一组一组的数据而已,对这些数据的操作(选择、读取、写入/更新)是通过特定的文件操作APDU命令来完成的。所以数据才是本真,文件只是表象。某一组数据该作为什么样的文件让外界来访问,是由卡片的COS决定的。

  按照规范的约定DF指的是专用文件Dedicated File的缩写,DF的作用可以等同于计算机中的目录文件,EF则是基本信息文件Elementary File,也就是说通常情况下和应用相关的数据都会存放于EF中。

  为了对文件进行访问,需要给文件分配一个特定的标识。无论是DF还是EF都会有对应的两个字节长ID标识,也就是所谓的FID。而DF还会有5-16个字节长的名字,也叫做AID。EF还会有一个5位长(范围从1到30)的短文件标识,就是SFI。按照7816规范的定义,以及根据7816派生出来的一些行业应用规范的定义基本上都是这样的。无论是FID还是AID以及SFI,在可以选择的路径范围内(这句话可能稍微有点绕,体会后也就自然明白了),不同的文件(包括DF和EF)的取值都不能相同。

  在一张卡片里(这里说的是卡片而不是某个应用)有且仅有一个特殊的DF,称为主文件MF,这个MF的FID默认为3F00,相当于计算机中的根目录,而且在任何时候MF都可以被选择。如果某个DF下没有子DF,只有若干EF,那么这个DF也被称作ADF,反之如果某个DF下除了有EF之外,还有子DF,那么这个父级的DF也被称作DDF。

  在卡片的使用过程中,对于DF的操作只有“选择”一种而已,但是对于EF的操作则有:选择、读、写三种形式。

  在文件选择操作过程中,对于DF的选择可以通过FID或者AID来实现,而对于EF的选择只有FID的方式。能够被选择的文件(无论是DF还是EF)必须在可见的路径范围内(这句话也有点绕)。

  至于对EF文件的读、写可以通过SFI的方式直接进行,也可以先通过FID选择某个EF,然后再进行读写。

  要特别强调的一点:以上说的这些都是和某些应用规范细细相关的,也和COS的实现细细相关。换句话说,如果你自己写一个满足某个特定应用的COS,你完全可以按照自己的意愿来。比如把MF的FID定义为8F00,比如EF也可以增加AID,比如卡片在任何时候都可以选择各级DF及其下属的EF,等等。。。。。。

  总之,既要熟悉规范,但是又不能把某个行业应用的规范奉为号令天下的圣旨。

深入理解7816(5)-----关于文件DF/EF/MF/FID/AID/SFI的更多相关文章

  1. cos中的文件结构(DF/EF/MF/FID/AID/SFI..)

    转载自:https://blog.csdn.net/Enjoy_endless/article/details/75108349 刚开始接触CPU卡的时候,对于各种文件.应用的定义容易模糊不清,通常不 ...

  2. 深入理解7816(3)-----关于T=0 【转】

    本文转载自:http://blog.sina.com.cn/s/blog_4df8400a0102vcyp.html 深入理解7816(3)-----关于T=0 卡片和终端之间的数据传输是通过命令响应 ...

  3. 深入理解7816(1)---- 关于F/D和etu【转】

    本文转载自:http://blog.sina.com.cn/s/blog_4df8400a0101gkss.html 深入理解7816(1)---- 关于F/D和etu 对于刚接触智能卡的工程师来说, ...

  4. 深入理解7816(2)---关于ATR【转】

    本文转载自:http://blog.sina.com.cn/s/blog_4df8400a0102vcrk.html 深入理解7816(2)---关于ATR 智能卡(此处主要指接触式CPU卡)本身始终 ...

  5. 深入理解7816(3)-----关于T=0

    卡片和终端之间的数据传输是通过命令响应的方式进行的,卡片只能被动地接收命令,并且给出响应.所有的命令都是以命令头开始,而该命令被完整地执行后(无论结果对错),必须以包含状态字(SW1 SW2)的响应结 ...

  6. 深入理解7816(1)---- 关于F/D和etu

    对于刚接触智能卡的工程师来说,在阅读7816-3规范的时候,常常被其中的一些术语迷惑,读起来会觉得有些别扭.尤其是在看到复位应答中的F和D设置,以及对应的etu的时候,会觉得有些复杂和难以理解. 其实 ...

  7. 深入理解java虚拟机---Class文件(二十)

    无符号数.表 当实现了不同语言的编译器,比如jython,jruby等等,那么就可以利用这些语言编写代码,通过各自的编译器编译成符合jvm规范的字节码文件,就可以利用jvm来执行了. Class文件在 ...

  8. 一文理解Java-class字节码文件

    前言 java语言在其刚诞生之际喊出的口号--"Write Once,Run Anywhere",正是基于字节码(byte code)而存在的,java能够做到平台无关性,得力于这 ...

  9. 深入理解7816(4)---关于T=1

    之前说过的T=0协议,基本上相当于是透明的数据,也就是说从应用的角度看,通过T=0传递的TPDU数据信息大都可以直接转换为对应的APD命令响应数据,“字节”是T=0协议最小的数据传输单元. 对于T=1 ...

随机推荐

  1. [置顶] 【Git入门之十】Rebase操作

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12309627 Rebase,衍合?变基?唉,我也不知道要怎么翻译合适...变 ...

  2. Hello,world,l'm coming!

    #include<studio.h> int main() { printf("Hello,Word!" l'm coming\n"); return0; }

  3. zookeeper[5] zookeeper集群配置及伪集群配置

    参考:http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html 集群配置: 1.配置文件conf/zoo.cfg,除了单机模式的配置之外, ...

  4. JS-Array数组内置对象

    直接上代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...

  5. js中的循环语句

    js中的循环语句可分为三种:1.while:2.do……while:3.for. while的语法为 while (exp) {    //statements;} var a=1,b=0; whil ...

  6. 手势触摸定位(UIPanGestureRecognizer)

    /** 1.相对于父坐标系而言,表示当前触摸点所在的位置 */ CGPoint locationPoint = [panGestureRecognizer locationInView:panGest ...

  7. javascript单元测试-jsamine[转]

    Jasmine的开发团队来自PivotalLabs,他们一开始开发的JavaScript测试框架是JsUnit,来源于著名的JAVA测试框架JUnit.JsUnit是xUnit的JavaScript实 ...

  8. PHP magic_quotes_gpc

    大多的PHP程序,都有这样的逻辑: 如果发现php.ini配置为不给GPC变量自动添加转义斜线,则PHP自动为GPC添加转义斜线 但是事实上,这是错误的,因为它改变了GPC变量原来的值. 有这个遗留习 ...

  9. psp个人软件过程需求文档

    1.  业务需求 1.1 应用背景 开发软件项目进度计划总是那么不准确,延期经常出现,跟可恨的是甚至无法给出一个相对比较明确的延迟时间.很大 因素在于分配给开发人员的完成时间与开发人员的实际完成时间有 ...

  10. MySQL 二进制日志(Binary Log)

    同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分. MySQL有几种不同的日志文件.通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等.这些日志能够帮助我们定位mysqld ...