读写M1卡小结

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

  6. 指令详情可参考上面的文档,这里说下 因与读卡器相关而造成的坑。
    加载认证密钥:
    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都不同,由厂商文档提供。

  7. 使用的是java读写卡,用到javax.smartcardio包下的相关API。
  8. 读写卡的另一个坑,当检测到卡的时候,需要等待0.5-1S左右,再去和卡交互。检测到卡,立即认证读写可能会操作失败。我的实践是:在我的64位win7机器上,不等待,直接操作,没问题;在另外2台(1台64位win7,一台64位win10)机器上,不等待,总是报PCSCException,等待200ms,有时报错,等待1S基本不报错。
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值