[开源]使用C# 对CPU卡基本操作封装
Github 地址:https://github.com/zifeiniu/CPUCardLib
项目需求及简介:
公司要求将用户相关的信息储存到射频卡中,之前项目使用的Mifare类型卡,只储存了用户的卡ID。Mifare S70容量也不够,遂使用CPU卡,FM1280,可达80KB的EEROM存储。
在CSDN上花积分下载了一个C#读取CPU卡的Demo,恶心的是不仅没有源码,而且互操作调用封装的DLL,还指定使用他们的读卡器,打广告还带赚我积分的。。
然后自己写了一个,开源一下,供大家改改。。
时间紧迫,从不懂,到写完这个也就两星期,等有空了继续写个读公交卡和银行卡。。。
介绍
已实现两种设备的接口
Pcsc,使用CAR122U读卡器(PcscCardReader)(https://github.com/danm-de/pcsc-sharp),只要实现PCSC驱动读卡器都可以使用。
德卡D3D8 读卡器 DeCardReader。
添加新读卡器,只需要实现接口ICPUCardReader即可。接口很简单,只要实现发送byte[],返回byte[]即可。
CpuCard类封常用操作命令。
目前只实现外部身份验证,没写秘钥操作相关。
创建二进制文件,写入文件,读取文件,记录日志等。
遇到的坑
最大二进制文件:
文档没有说明二进制文件最大可用多少大。创建一个大的二进制文件时没有报错,但是写入时报错。
检查文档:当P1 参数的最高位不为1时,P1 P2 为欲写入的文件偏移量,也就是说最大偏移量为7FFF,32767个字节,使用Unicode编码,最多可写16383个汉字
硬件资源释放问题:
像这种硬件读取完成的时候不知道什么时候释放资源合适,每次发送命令的时候打开,发送完成后关闭,这样不晓得慢是肯定了,而且可能会减少硬件寿命。
所以在设备层发送命令后不关闭,在卡操作业务层关闭。当下次发送命令时,自动检测设备未打开,则打开设备。
读取二进制文件问题:
因为写入的可以指定二进制文件的长度,但是读取二进制文件的时候,没找到如何获取二进制文件的长度。
发现读取会有提示如下
6Cxx 出错 Le长度错误,实际长度是xx。
则读取碰到6C后,修正此次读取数据长度,继续读取。
参考文件:
FMCOS专用技术手册 (使用复旦微电子的卡)
测试设备型号
ACR122U 德卡D8(即将实现)
测试CPU卡型号:
FM1216-137 FM1280
未实现功能
时间紧迫,目前没用使用加密,线路保护功能。

[开源]使用C# 对CPU卡基本操作封装的更多相关文章
- cpu卡,sam卡原理
第一部分 CPU基础知识一.为什么用CPU卡IC卡从接口方式上分,可以分为接触式IC卡.非接触式IC卡及复合卡.从器件技术上分,可分为非加密存储卡.加密存储卡及CPU卡.非加密卡没有安全性,可以任意改 ...
- CPU卡
CPU卡芯片通俗地讲就是指芯片内含有一个微处理器,它的功能相当于一台微型计算机.人们经常使用的集成电路卡(IC卡)上的金属片就是CPU卡芯片.CPU卡可适用于金融.保险.交警.政府行业等多个领域,具有 ...
- CPU卡详解【转】
本文转载自:http://blog.csdn.net/logaa/article/details/7571805 第一部分 CPU基础知识 一.为什么用CPU卡 IC卡从接口方式上分,可以分为接触式I ...
- CPU卡与M1卡的区别
简单来讲CPU卡比M1卡更加安全.扩展性更好.支持更多应用 CPU卡 M1 操作系统 带有COS系统 无COS系统 硬件加密模块 硬件DES运算模块 无实现算法的硬件加密模块 算法支持 标准DES ...
- CPU卡及NFC供应商
1.苏州市民卡供应商 北京握奇数据/watchdata 2.苏州市民卡手表 苏州连爱/linklove公司 3.NFC供应商 英飞凌/Infelion, NXP,复旦微电子, 4.什么是CPU卡? C ...
- 公交CPU卡原理
现在的公交卡已经开始逐步的采用IC卡(CPU卡?什么东东?),而且在国家交通部的推动下,开始了全国范围内的互联互通.以后,手里只用拿着一张卡,就可以走遍全国,而且如果支持在线充值的话,基本上就不用在车 ...
- CPU卡中T=0通讯协议的分析与实现
IC卡的应用越来越广泛,从存储卡到逻辑加密卡,目前CPU卡已经逐渐在应用中占据主导地位.CPU卡根据通讯协议可分为两种:接触式和非接触式.接触式CPU卡主要采用两种通讯协议:T=0和T=1通讯协议.T ...
- CPU卡读写程序
CPU卡也称智能卡,卡内的集成电路中带有微处理器CPU.存储单元(包括随机存储器RAM.程序存储器ROM以及芯片操作系统COS.装有COS的CPU卡相当于一台微型计算机,不仅具有数据存储功能,同时具有 ...
- IC卡、M1卡、CPU卡、SAM卡、PSAM卡的联系与区别
一. 技术方面(非接触式IC卡) 1. 逻辑加密卡又叫存储卡,卡内的集成电路具有加密逻辑和EEPROM(电可擦除可编程只读存储器). 2. CPU卡又叫智能卡,卡内的集成电路包括中央处理器(CPU ...
随机推荐
- python接收axios的post请求,并处理后返回数据
公司的python工程师不会js和python数据交互,所以我就去试了一下. 首先安装python,django框架和django-cors-headers. python官网下载,按提示操作,记住最 ...
- python之map,filter
map和filter是python里面比较重要的BIF,map的主要作用就是对集合里面的每一个元素进行处理,filter的作用就是过滤集合,具体功能如下 t =lambda x:x%2 list(fi ...
- 剑指Offer编程题3——从尾到头打印链表
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 题目解析 方法1:建立两个vector,第一个用来存储正向访问的数据,第二个用来反向存储. /** * struct L ...
- referrer policy
我们知道,在页面引入图片.JS 等资源,或者从一个页面跳到另一个页面,都会产生新的 HTTP 请求,浏览器一般都会给这些请求头加上表示来源的 Referrer 字段.Referrer 在分析用户来源时 ...
- GrayLog + Logspout + Docker 实现分布式日志聚合
前提条件:你的服务器上已经安装了Docker和Docker Compose 一.安装GrayLog(Docker方式) version: '2' services: mongodb: image: m ...
- selenium启动报错“ incorrect JSON status mapping for 'unknown error' (500 expected)”
前面讲了工程启动报错“selenium启动报错Unable to read VR Path Registry from C:\Users\clinva\AppData\Local\openvr\ope ...
- Android 8.0 无法收到broadcast
参见此页 https://commonsware.com/blog/2017/04/11/android-o-implicit-broadcast-ban.html 目前最简单的方法就是:把targe ...
- 初学python之路-day07-数据类型总结
数据类型的各种使用方法:#1.字符串类型s='abcdef's1=s[0]s2=s[-1]print(s1,s2) #h d 索引取值,正向,反向a = 10b = "20"c = ...
- mysql 利用druid 为访问密码加密
在原来数据库配置文件jdbc.properties 文件中增加几行加密文件 jdbc.username=rootjdbc.password=KqYkfcQkQOdOpCnaokLfb9Kbzdf+NG ...
- (转)前端开发-发布一个NPM包之最简单易懂流程
原文地址:https://www.cnblogs.com/sghy/p/6829747.html 1.npm官网创建npm账户 npm网站地址:https://www.npmjs.com/ npm网站 ...