智能卡CPU卡开卡指令

参考文档:
《新版FMCOS2.0用户手册.pdf》
《Cpu卡操作的基本方法指令.pdf》

00 B0 96 00 06

3B 79 18 00 00 50 53 4D 5F 54 43 31 30 30
3B 79 18 00 00 50 53 4D 5F 54 43 31 30 30
00 B0 96 00 06 B0 01 53 00 02 9D 95 90 00
00 B0 95 00 0A B0 53 01 01 01 00 00 00 17 14 13 90 00
3B 79 18 00 00 50 53 4D 5F 54 43 31 30 30
3B 79 18 00 00 50 53 4D 5F 54 43 31 30 30
00 B0 96 00 06 B0 01 53 00 02 9D 95 90 00
00 B0 95 00 0A B0 53 01 01 01 00 00 00 17 14 13 90 00

00,B0,83,00,06,
00A4000000
00C000000F

    BYTE ucSendBuf[5] = {0x00,0xC0,0x00,0x00};
    ucSendBuf[4] = SW2;

00a40000023f00
00 B0 96 00 06
01 53 00 02 9D 95 90 00

代码
CLA00
INSB0
P1xx
P2xx
Lc不存在;(CLA=04 时除外)
Data不存在;(CLA=04 时,应包括MAC)
Le要读取数据的长度

若P1 的高三位为100,则低5 位为短的文件标识符,P2 为读的偏移量。
若P1 的最高位不为1,则P1 P2 为欲读文件的偏移量(P1 为偏移量高字节,P2 为低字
节),所读的文件为当前文件。

例子:
1]:文件标识符为0005 的二进制文件,文件主体空间的大小为8 个字节,建立时不采
用线路保护。
读出自偏移量01 开始到文件结束的所有数据,不进行线路保护,则命令为:
00 B0 85 01 00
由卡片返回的响应数据为:
11 22 33 44 55 66 77 9000

INS = E0 :Create File建立文件,包括MF,DF 和EF

80E000160728001EF0F0FF02

最后的02 是和密钥相关的

代码例子
CLA8080
INSE0E0
P1文件标示(File ID)00
P216
Data文件控制信息和DF 名称0728001EF0F0FF02
Le要读取数据的长度

目录文件格式:(包括DF MF ,不包括 EF)

80,E0,3F,01,0D,
38,05,20,F0,F0,95,FF,FF,44,44,46,30,31,

长度文件类型文件空间建立权限擦除权限应用文件ID保留字DF名称
1字节1字节2字节1字节1字节XXFF FF5到16字节
0byte1byte2-3byte4byte5-6
0D3805 20F0F095FF FF44 44 46 30 31

这里写图片描述

基本文件EF格式(包括密钥文件,不包括DF,MF)

文件类型文件类型文件空间读权限写权限保留字A保留字B
文件类型byte1byte2-3byte4byte5byte6byte7
二进制文件28文件空间读权限写权限FF见说明
定长记录文件2A文件空间读权限写权限FF见说明
循环文件2E文件空间读权限写权限FF见说明
PBOC ED/EP2F02 08使用权限保留(00)FF交易记录短标识
变长记录文件2C文件空间读权限写权限FF见说明
密钥文件3F文件空间DF文件短标识符增加权限FFFF

这里写图片描述

所有文件建立后不能被自动选择

Send Data :00,A4,00,00,00,
Recv Data:61,0F,
Send Data :00,C0,00,00,0F,
Recv Data:6F,0D,84,06,46,4D,53,48,4D,46,A5,03,88,01,01,90,00,
Send Data :00,84,00,00,04,
Recv Data:CA,E9,FD,62,90,00,
Send Data :00,82,00,00,08,DD,4D,2C,FC,5F,31,D6,7E,
Recv Data:90,00,
Send Data :80,0E,00,00,00,
Recv Data:90,00,
Send Data :00,A4,00,00,00,
Recv Data:61,0A,
Send Data :00,C0,00,00,0A,
Recv Data:6F,08,84,06,46,4D,53,48,4D,46,90,00,
Send Data :80,E0,00,00,07,3F,00,B0,01,F0,FF,FF,
Recv Data:90,00,
Send Data :80,D4,01,00,0D,39,F0,F0,AA,55,FF,FF,FF,FF,FF,FF,FF,FF,
Recv Data:90,00,
Send Data :80,E0,3F,01,0D,38,05,20,F0,F0,95,FF,FF,44,44,46,30,31,
Recv Data:90,00,
Send Data :80,E0,00,01,07,3F,01,8F,95,F0,FF,FF,
Recv Data:90,00,
Send Data :80,D4,01,01,08,3A,F0,EF,44,55,12,34,56,
Recv Data:90,00,
Send Data :80,E0,00,03,07,28,00,1E,F0,F0,FF,02,
Recv Data:90,00,
Send Data :80,E0,00,04,07,28,00,0F,F4,F0,FF,02,
Recv Data:90,00,
Send Data :00,A4,00,00,02,00,03,
Recv Data:90,00,
Send Data :00,D6,00,00,05,01,02,03,04,05,
Recv Data:90,00,
Send Data :00,A4,00,00,02,00,04,
Recv Data:90,00,
Send Data :00,D6,00,00,06,11,22,33,44,55,66,
Recv Data:90,00,

Send Data :00,B0,83,00,06,
Recv Data:01,02,03,04,05,00,90,00,
SmartCard Reader Cnt dw =1,
i=0,Gemplus USB Smart Card Reader 0
Gemplus USB Smart Card Reader 0
连接读卡器: Gemplus USB Smart Card Reader 0
通讯协议: T0
Send Data :00,B0,83,00,06,
Recv Data:01,02,03,04,05,00,90,00,

00,A4,00,00,02,3F,01,
80E000160728001EF0F0FF02
80E000150728001EF0F0FF02

00,A4,00,00,02,00,16,
00,D6,00,00,06,01 ,53 ,00 ,02 ,9D ,95

00,A4,00,00,02,00,15,
00,D6,00,00,0A,53 ,01,01 ,01 ,00, 00, 00, 17 ,14 ,13

00 B0 96 00 06
00 B0 95 00 0A

FM1216 开卡指令:

SmartCard Reader Cnt dw =1,
i=0,Gemplus USB Smart Card Reader 0
Gemplus USB Smart Card Reader 0
连接读卡器: Gemplus USB Smart Card Reader 0
通讯协议: T0
Send Data :00,84,00,00,04,
Recv Data:80,3E,F2,2C,90,00,
Send Data :00,82,00,00,08,6B,23,4F,74,12,6F,4C,9A,
Recv Data:90,00,
Send Data :80,0E,00,00,00,
Recv Data:90,00,
Send Data :00,A4,00,00,00,
Recv Data:61,12,
Send Data :00,C0,00,00,12,
Recv Data:6F,10,84,0E,31,50,41,59,2E,53,59,53,2E,44,44,46,30,31,90,00,
Send Data :80,E0,00,00,07,3F,00,B0,01,F0,FF,FF,
Recv Data:90,00,
Send Data :80,D4,01,00,0D,39,F0,F0,AA,55,FF,FF,FF,FF,FF,FF,FF,FF,
Recv Data:90,00,
Send Data :80,E0,00,16,07,28,00,1E,F0,F0,FF,02,
Recv Data:90,00,
Send Data :80,E0,00,15,07,28,00,1E,F0,F0,FF,02,
Recv Data:90,00,
Send Data :00,A4,00,00,02,00,16,
Recv Data:90,00,
Send Data :00,D6,00,00,06,01,53,00,02,9D,95,
Recv Data:90,00,
Send Data :00,A4,00,00,02,00,15,
Recv Data:90,00,
Send Data :00,D6,00,00,0A,53,01,01,01,00,00,00,17,14,13,
Recv Data:90,00,
Send Data :00,B0,96,00,06,
Recv Data:01,53,00,02,9D,95,90,00,
Send Data :00,B0,95,00,0A,
Recv Data:53,01,01,01,00,00,00,17,14,13,90,00,

上述开卡是使用的是如下的软件:
用到的卡片为 复旦FM1216-109 纯16k 双界面卡(即可以接触式,也可以非接触式),淘宝买的

复旦卡的初始密钥为: FFFFFFFFFFFFFFFF

在主目录下建立密钥文件,和建立 16和15两个二进制文件,需要在开卡的时候一次性完成,卡片掉电之后,在主目录再次建立别的二进制文件,会出错。具体原因应该是和卡的机制有关。这句话可能是个人的一个错误的判断,有空验证一下。
这里写图片描述

\ETC_SmartCard\my_doc\CardIssue1\CardIssue1

复旦 1208出厂初始主控密钥为 8 个字节的FF,即 FFFFFFFFFFFFFFFF
执行指令时返回有 9000表示执行成功!

  1. 00A4000000 选择 MF 下的根目录 返回值为
    6F15840E315041592E5359532E4444463031A5038801019000 具体意思查阅卡系
    统手册(FMCOS)

2.外部认证
2.1 取 4 个字节的随机数 0084000004
2.2 用 8 个字节的 初始密钥 FFFFFFFFFFFFFFFF 和 4 随机数 +00000000 进
行解密 生成 8字节解密数据 (用DES 函数计算得出)
注意,对密钥的加密解密是一个逆过程,原理一样的.
2.3 发送 0082000008+8字节密文数据
例: 取出的随机数为 73 87 10 10 然后在 DES程序里,输入如下:
src1[0]=0x73;
src1[1]=0x87;
src1[2]=0x10;
src1[3]=0x10;
src1[4]=0x00;
src1[5]=0x00;
src1[6]=0x00;
src1[7]=0x00;
卡密钥:
key1[0]=0xff;
key1[1]=0xff;
key1[2]=0xff;
key1[3]=0xff;
key1[4]=0xff;
key1[5]=0xff;
key1[6]=0xff;
key1[7]=0xff;
然后执行函数:Single_DES_Decrypt_Encrypt(1,src,key1,result); // 1 表 示 解 密 ,
src 明文 KEY1 密钥, result密文
result1返回的 8 个字节就是你要的密文数据了,如下图:
result1[0]=0X1B;
result1[1]=0XE4;
result1[2]=0X98;
result1[3]=0X0C;
result1[4]=0X1F;
result1[5]=0X32;
result1[6]=0XF2;
result1[7]=0X61;

  1. 删除 MF下的所有文件指令:800E000000
    返回 01 由于擦除命令时间较长需等待,当返回0900 后,表示擦除成功!
  2. 建立 MF目录下的密钥文件
    先选择根目录: 00A4000000
    然后执行建密钥文件命令: 80E0 0000 07 3F00B0 01F0 FFFF
    说明: 80E0 :指令类别和指令码; 0000 :文件标识; 07:长度; 3F :文件类型,此为密钥
    文件.
    00B0: 所建文件可用的空间,即可用 0XB0 个字节的空间; 01 :读权限; F0 :写权
    限.
    07表示后面有7个字节
    01 :读权限;
    01表示没有读的权限
    F0表示可以任意写

  3. 密钥文件建好后就要给其增加密钥了
    执行指令: 80D4 0100 0D 39 F0F0 AA55 FFFFFFFFFFFFFFFF
    说明: 80D4 :指令类别和指令码; 0100 :文件标识; 0D:长度; 39 :文件类型,此为外部
    认证密钥
    0D表示后面有13个字节
    F0 :读权限; F0 :写权限 ;AA:后续状态; 55 :错误计数,当前为 5次机会,返回错
    误代码是 63 CX, X就是次数了,当X为0时卡永久补锁,操作主控密钥时请注
    意!

  4. 建立目录文件 DF
    执行指令: 80E0 3F01 0D 38 0520 F0F0 95 FFFF 4444463031
    说明: 80E0 :指令类别和指令码; 3F01 :文件标识; 0D:长度; 38 :文件类型
    0520 :文件的空间大小 ; F0 :读权限; F0 :写权限 ;
    4444463031 :文件名 DDF01 也就是ASCII码了

  5. 建立 DF目录下密钥文件
    执行指令: 80E0 0001 07 3F018F 95F0 FFFF
    3F表示是密钥文件

  6. 在 DF目录下密钥文件里增加口令密钥
    执行指令: 80 D4 01 01 08 3A F0 EF 44 55 12 34 56

说明:
80D4 :指令类别和指令码;
0101 :文件标识;
08:长度;
3A:文件类型,即口令密 钥
F0 :读权限;
EF:写权限 ;
44 :后续状态;
55 :错误计数;
12 34 56 :3个字节的PIN 密码

9. 基本文件,建立二进制文件

执行指令: 80 E0 00 03 07 28 00 1E F0 F0 FF 02

说明:
80E0 :指令类别和指令码; 创建文件CreateFile
00 03 :文件标识;
07:长度; 数据域长度
28 :文件类型,即二进制文件
00 1E:空间大小,即为写入二进制文件的字节个数 ; 是文件的空间大小
F0 :读权限;
F0 :写权限 ;
注意:此处的读写权限都为F0,表示读跟写都没有限制,可随便读写,不用访问权 限
02表示写操作的时候,使用标示为01的密钥

执行指令: 80E0 00 04 07 28 00 0F F4 F0 FF 02

说明:
80 E0 :指令类别和指令码; 创建文件
00 04 :文件标识;
07:长度;
28 :文件类型,即二进制文件
00 0F:空间大小,即为写入二进制文件的字节个数 ;
F4 :读权限;
F0 :写权限 ;
注意:此处的读权限为
F4,表示读权限要大于或等于 4 的情况下才能读取,也就是 说要验证口令后才能读取,因为口令的后续状态为4 ;
而写呢,即可随便写,没有限 制
即安全状态值 0~F都可以写二制数据

  1. 写二进制文件,须先读出该文件所在目录下的标识,然后再给其写入
    10.1:
    执行指令:比如读取标识为 0003的,则:00A40000020003 返回9000 表示读取成功
    然后写入你要写入内容,空间大小不能超过 1E字节(建立该文件时设定的)
    执行写二进制的指令: 00D6 0000 05 0102030405
    说明: 00D6 :指令类别和指令码; 0000 :偏移量,意思是指要读出的内容从该位置开始
    05:长度LEN; 0102030405 : 就是你要写入的内容与前面的长度对应

执行指令:00A40000020004 返回 9000 表示读取当前标识的二进制文件成功

执行写二进制的指令: 00 D6 00 00 06 11 22 33 44 55 66
说明: 00D6 :指令类别和指令码; 0000 :偏移量,意思是指要读出的内容从该位置开始
06:长度LEN; 112233445566 : 就是你要写入的内容与前面的长度对应

11.读出二进制文件
00B0830000 读文件标识符为0003的文件,从偏移量0,开始读

  1. 验证口令
  2. PIN上面已设为123456
    在当前目录下执行指令: 0020 0001 03 123456
    说明: 0020 :指令类别和指令码; 0001:标识; 03:为密码个数字节为单位; 123456:密码
    内容

关于对文件的访问必须在当前目录下才能访问,否则提示:找不到该文件
在当前目录下读写该文件时,如果设置有权限时,必须要通过口令或外部认证方可读写,否则
提示:安全状态不满足
操作密码时一定要注意,记得自己所设的密码, 63 CX, 这里的X就是还剩可用多少次了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值