博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[开源]使用C# 对CPU卡基本操作封装
阅读量:5130 次
发布时间:2019-06-13

本文共 1035 字,大约阅读时间需要 3 分钟。

Github 地址:

项目需求及简介:

公司要求将用户相关的信息储存到射频卡中,之前项目使用的Mifare类型卡,只储存了用户的卡ID。Mifare S70容量也不够,遂使用CPU卡,FM1280,可达80KB的EEROM存储。

在CSDN上花积分下载了一个C#读取CPU卡的Demo,恶心的是不仅没有源码,而且互操作调用封装的DLL,还指定使用他们的读卡器,打广告还带赚我积分的。。
然后自己写了一个,开源一下,供大家改改。。
时间紧迫,从不懂,到写完这个也就两星期,等有空了继续写个读公交卡和银行卡。。。

介绍

已实现两种设备的接口

Pcsc,使用CAR122U读卡器(PcscCardReader)(),只要实现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

未实现功能

时间紧迫,目前没用使用加密,线路保护功能。

111807-20180822203206202-495048855.png

转载于:https://www.cnblogs.com/zifeiniu/p/9520208.html

你可能感兴趣的文章
Android LayoutInflater原理分析
查看>>
AS不能真机调试 (转)
查看>>
SQL SERVER代码生成器必备
查看>>
使用NET USE将USB端口模拟为LPT1
查看>>
二维数组和指向指针的指针
查看>>
BBS项目(四)
查看>>
IaaS,PaaS和SaaS
查看>>
中山纪念中学 培训 日记
查看>>
LeetCode "Best Meeting Point" !
查看>>
《实时控制软件设计》第四周作业
查看>>
Valid Word Abbreviation Leetcode
查看>>
SQL数据库 开启时出现 数据库连接错误2,error:40的问题。如何解决
查看>>
新阶段
查看>>
屏幕适配
查看>>
mysql使用索引优化查询效率
查看>>
lca转RMQ
查看>>
HTML5+CSS3 效果网站集合
查看>>
关于前端开发小程序随笔
查看>>
关于Filter和转发之间的小问题
查看>>
ios framework通用库的制作
查看>>