参考文档:
《新版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

代码
CLA 00
INS B0
P1 xx
P2 xx
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 是和密钥相关的

代码 例子
CLA 80 80
INS E0 E0
P1 文件标示(File ID) 00
P2 16
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字节 XX FF FF 5到16字节
0 byte1 byte2-3 byte4 byte5-6
0D 38 05 20 F0 F0 95 FF FF 44 44 46 30 31

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

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

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

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就是还剩可用多少次了.

智能卡CPU卡开卡指令相关推荐

  1. 计算机原理(CPU+存储+OS+指令)

    计算机原理(计组+OS总结) https://mp.weixin.qq.com/s/ttncekujB82g88GRx3a6lQ   大佬写得太到位了,转载起来以后忘了的话再看看 CPU CPU 内部 ...

  2. 开卡教程_流量卡开卡教程(必看)

    流量卡注意事项(必看)   注意:因系统更新,凡是在2019-3-10之前开通的流量卡若输入绑定的手机号提示卡号不存在,请输入流量卡后面ICCID,确认后需要重新绑定一下.   充值和开卡是同一个平台 ...

  3. 自己动手写CPU(4)移动操作指令的实现

    自己动手写CPU(4)移动操作指令的实现 指令说明 MIPS32指令集架构中定义的移动操作指令共有6条: movn.movz.mfhi.mthi.mflo.mtlo,后4条指令涉及对特殊寄存器HI.L ...

  4. 自己动手写CPU(1)五级流水线及CPU第一条指令ori

    自己动手写CPU(1)五级流水线及CPU第一条指令ori 动机 不知为何研一的自由时间突然多起来,可能人一闲下来就容易焦虑吧,hhhhhh.正好之前看到一本<自己动手写CPU>,就按照此书 ...

  5. 支付宝会员卡开卡表单模板配置(alipay.marketing.card.formtemplate.set)JAVA版本demo

    官方接口文档: https://docs.open.alipay.com/251/105668/ ,我这里写的是开卡组件前两步的操作流程, 仅供参考 1. 调用接口前的准备工作(创建应用等)参考该文档 ...

  6. 微信小程序手机号快速填写及会员卡开卡组件开放

    微信公众平台宣布小程序用户注册等环节,现在可以使用手机号快速填写组件.另外,微信会员卡商家在小程序内可以使用开卡组件帮助用户快速开卡,并自动将会员卡放入卡包. 小程序开放手机号快速填写组件,非个人开发 ...

  7. 使用logisim搭建单周期CPU与添加指令

    使用logisim搭建单周期CPU与添加指令 搭建 总设计 借用高老板的图,我们只需要分别做出PC.NPC.IM.RF.EXT.ALU.DM.Controller模块即可,再按图连线,最后进行控制信号 ...

  8. 道cpu、道指令、道编程基本原理15

    我在前面说过道cpu.道指令.道编程的理论根源,估计大家都忘了,因为这几天我的文章很少再提,担心大家把我当成从道观里出来的骗子,但现在不得不再提这些今人已遗忘的老祖宗的旧东西.我引用了<道德经& ...

  9. Intel CPU的CPUID指令(转载)

    Intel CPU的CPUID指令 Intel有一个超过100页的文档,专门介绍cpuid这条指令,可见这条指令涉及内容的丰富. 记得去年的时候,曾经有个"英布之剑"问过我这条指令 ...

最新文章

  1. 一文详解如何配置meld做git diff工具
  2. 第八章 用户方式中线程的同步(2)
  3. python数值型转换字符型_2.6 字符型常量
  4. 为什么vs会输出一个框作为结果_检测与分类专辑 | 对精准目标检测的含不确定性的边界框回归...
  5. 【技术综述】有三AI不得不看的技术综述
  6. Uva_105 (类并查集)
  7. 解析几何 —— 椭圆
  8. JSON 在线工具 BeJson
  9. 如何用cool edit剪辑拼接音频文件
  10. 城市管理观念要革新 智慧安防是前提条件忽视不得
  11. 手机浏览器脚本知乎直接看不用下载app
  12. 邹恒甫:谈点2002年后海鬼/龟和特聘教授的工资待遇和福利
  13. centos 更新时间
  14. ohos-build 安装失败分析
  15. 磁盘满了怎么清理之空间占用分析软件SpaceSniffer
  16. 利用R语言制作GGEBiplot-双标图教程
  17. 【数字化项目管理规章体系建立】
  18. 单层感知器python_多层感知器背后的概念及Python实现
  19. 第7期-通过潇湘书院爬取小说
  20. 获取推荐商品列表(淘宝)

热门文章

  1. python爬虫 京东关键词搜索商品及具体参数和评论
  2. 小武告诉滨滨每天可以吃一块或者两块巧克力。假设滨滨每天都吃巧克力,问滨滨共有多少种不同的吃完巧克力的方案。
  3. python 对数函数_使用Python玩转高等数学(4):对数函数
  4. 实例学习Ansible系列:配置文件ansible.cfg的设定与使用
  5. 为您的创业公司推荐5款类Slack开源协作工具
  6. 转:Android实时获取音量(单位:分贝)
  7. Visio录制宏代码——重复批量导出600dpi的tiff图片
  8. 考研数学你必须要懂的事情
  9. **阿里云ECS Linux服务器图形化界面安装方法 Ubuntu**
  10. ImportError: No module named datetime全局python解决time显示问题