首先, MF, DF和EF这三个其实是iso7816里的概念. 是7816里规定的卡的文件结构. 这种文件结构是一种树形的结构. MF 可以理解为根目录,DF是目录,EF当成是目录里的文件. 所以MF其是也是一种DF,只不过是最上层的DF.
而ADF,DDF和AEF是PBOC/EMV里的概念. PBOC/EMV里定义的IC卡文件结构是符合ISO7816标准的. ADF和DDF其实是DF的两种映射,而AEF是EF的映射. 程序访问时,访问的是ADF,DDF和AEF, 而不是DF和EF. 这种机制非常像操作系统的地址访问, 我们的程序不能访问系统的物理地址,而只能访问由这个物理地址映射的虚拟地址,而同一个物理地址可以是映射到不同的虚拟地址. 所以我们可以把DF, EF 理解成是物理文件结构,而ADF,AEF理解成虚拟的可供程序访问的文件结构.
ADF与DDF有什么区别呢? 简单来说,ADF就已经可以标识一个或一组应用(为什么有一组应用,因为有部分AID匹配, 具体可参考PBOC/EMV文档), 因为它就是应用的入口文件. 而DDF是个目录入口, 它下面有ADF,也有可能还是DDF, 当然也可能什么都没有, 总之它是一个目录. ADF用ADF名来标识应用, ADF名也就是AID. 一个AID代表一个应用,比如电子钱包应用,借记应用,贷记应用等等. AID 是由ISO这种组织来分配. 它分为两个部分, 前面是五个字节的RID, 这个用来唯一标识应用提供商, 后面最长是11字节的PIX., 用来标识某个专有应用, 它由应用提供商定义. 举例来说, ISO可能分给mastercard公司一个RID, 就叫A000000002(5个字节)吧, 然后master-
card 公司再用PIX定义一些应用,比如电子钱包, 假设它是0001吧. 我们如果看到一个AID是A0000000020010, 就知道这是master-card 定义的电子钱包应用.事实上一个符合EMV/PBOC L2标准的终端程序,就是以这些AID为中心在运行,简单说就是找到一个应用,然后处理(处理的过程可就复杂了).