zoukankan      html  css  js  c++  java
  • 读写M1卡小结

    M1卡 (Mifare 1K) 1K指的是容量大小,16个扇区(0-15扇区),每个扇区分4块(0-3块),每块16个字节,16X4X16 = 1024byte=1kb。
    每个扇区的块3存储的是KEY_A(6字节)+控制位(4字节)+KEY_B(6字节)。控制位决定密钥A和密钥B分别能做哪些操作,如读写012块,修改密钥等。具体规则百度一下有很多文章说明。
    数据存储在每个扇区的0、1、2块。第0扇区的第0块是厂商代码,已经固化,不可更改。所以一般用于存储的是0扇区1、2块和1-15扇区的0-2块。
    指令流程 : 加载密钥(load)–>认证(auth)->读写等操作(read/write/inc/dec)。
    具体指令与读卡器相关。
    网上搜索M1相关内容时搜索到ACR122U读卡器(A)并下载到API文档(http://www.acs.com.hk/download-manual/933/API_ACR122U(CN)_2.02.pdf),根据其文档操作某品牌读卡器(B),加载密钥失败,直接认证成功,应该是使用了默认密钥FFFFFFFFFF,所以可以进行后续读写等操作,但无法改密码,因为改密码后因为加载密钥指令不正确会无法认证。
    另一品牌读卡器(C)所有指令都不对,联系到厂商,拿到了相应的api文档后,所有操作都可正常执行。

    指令详情可参考上面的文档,这里说下 因与读卡器相关而造成的坑。
    加载认证密钥:
    FF 82 00 00 06 FF FF FF FF FF FF (A读卡器)
    FF 82 00 61 06 FF FF FF FF FF FF (B读卡器)
    FF 50 00 00 06 FF FF FF FF FF FF (C读卡器)
    A是文档来的,B是某程序得来的(不知道是不是与此读卡器配套的程序,但确实是这个指令),C是厂商提供的。
    第2个字节表示命令,各厂商不一样,第4字节表示密钥加载到何处,各厂商又不一样。第5字节表示后面跟的密钥长度为6字节,后面6个字节就是密钥。
    认证和读写指令B读卡器与A文档中相同。C读卡器则与AB都不同,由厂商文档提供。

    使用的是java读写卡,用到javax.smartcardio包下的相关API。
    读写卡的另一个坑,当检测到卡的时候,需要等待0.5-1S左右,再去和卡交互。检测到卡,立即认证读写可能会操作失败。我的实践是:在我的64位win7机器上,不等待,直接操作,没问题;在另外2台(1台64位win7,一台64位win10)机器上,不等待,总是报PCSCException,等待200ms,有时报错,等待1S基本不报错。
    ---------------------
    作者:坚持做笔记
    来源:CSDN
    原文:https://blog.csdn.net/u011562187/article/details/59640614
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    媒体查询
    H5 progress标记
    sqlite数据库常用语句
    C#导出Word文档开源组件DocX
    bat实现监控进程守护程序-保证平台服务的稳定执行
    windows开机自动执行bat脚本启动cmd命令窗口并执行命令,最后自动关闭cmd命令窗
    Python实现定时执行任务的三种方式简单示例
    bat实现守护程序保证平台正常运行
    Windows CMD命令大全
    Windows下使用批处理文件.bat删除旧文件
  • 原文地址:https://www.cnblogs.com/xiaoxihebei/p/10750902.html
Copyright © 2011-2022 走看看