|
一切的起点,是手欠在某宝买了 RC522 射频读卡模块:
模块主控是 NXP 的 RC522(标准版) 或者 CV520(简版),内含一堆握手+通信协议,可以读写已知秘钥的 13.56MHz 射频卡。
13.56M 射频卡基本是兼容 MIFARE-1KB 协议,常见小区门禁卡就属于这类。外形则是千奇百怪:
入手读卡模块,本打算练习卡片访问编程,没想到后来一步步折腾成了物理密码器/大阵,特来分享下。
【硬件链路】
由于有 Arduino 库的加持,玩转 RC522 模块并非难事,只要连接物理 SPI 接口就能通信:
然而稍加调查,就发现了模块的险恶之处:仅支持 3.3v 供电及逻辑,在 5v-Arduino 的环境下基本全是坑。
3.3v供电还好解决,最麻烦的是数据口电平适配:串电阻钳位啥的,影响速度还不优雅。
转脸发现手头还有 GAL16V8,这个 CMOS-TTL 兼容的玩意最适合搞这个:
GAL16V8 的 IN/OLMC 为 5V-TTL 电平,高电位 3.5-4.0v,低电位 <0.8v,刚好适配 3.3v-CMOS 逻辑。
万用板走起来:
装好以后这就优雅多了:
至此 Arduino 已完成了和 RC522 的优雅连接,不需要难看的钳位电路以及额外飞线。
【基础软件】
Arduino 的 MFRC522 库已经非常完善,随便开一个示例就可以在现有硬件上读取卡片信息:
信息样式大致如此:
以 MIFARE-1KB 为例,全卡总计 16 个扇区(Sector),每个扇区包含 64 字节。
其中有 48 字节可用作扇区数据(内容任意,可修改),另 16 字节为扇区秘钥,用于给扇区加密。
在不加密/未锁死卡片的情况下,每张卡片功能上相当于一块“无线优盘”,特别适合离线存一些东西。
这也就给后续折腾埋下了伏笔。
【虚拟HID】
Arduino 底层有着近乎完美的硬件抽象层(HAL),使得高层只要遵循同样接口(例如SPI),就可以完美复用软硬件。
如图所示,硬件链路板如果接常规 Arduino-UNO,那就是一个基本的串口读卡器;
如果接带 USB 支持的 Arduino-Leonardo,那可以把读卡器和鼠标/键盘/U盘等等一系列 USB 设备揉在一起;
如果接带 2.4G-RF 支持的 ESP8266/32,那就是一个支持无线联网/蓝牙访问/小程序接入的IOT读卡器。
简直就是杂交获得遗传特性的翻版。
为了方便刷卡,选择了 USB 版本 Arduino-Leonardo,直接虚拟成一个 HID 键盘,而键盘动作存储于射频卡内。
系统的硬件(黑色)、软件(蓝色)框图如下:
在 Leonardo 当中运行 HID-Lib 形成一个虚拟的键盘,同时运行 SPI/MFRC522-Lib 形成对读卡器的访问。
而 GAL16V8 固件则相对简单,运行一个 Fuse-Wire 连线映射即可,将各 SPI 引脚正确映射到硬件板上。
至此基本折腾出了一个密码器的大阵原型:
某卡片里存储有密码字串,刷卡后 Arduino 获得上述字串,并通过虚拟 HID 键盘动作,向 Win10 实现按键敲击。
【效果】
将若干场景的密码写入不同卡片,就实现了密码的保存/管理。刷卡即手输密码。
固化了“Hello MyDigit”字串的卡,只要有个文本界面(例如记事本),刷卡就自动键入这一串:
固化了锁屏密码的卡(含回车键),刷卡即解锁 Win10 锁定:
固化了某宝账号/登陆码的卡,刷两次(第一次填充账号,第二次填充登陆码)即剁手:
于是大阵得成,阵眼施以相应符篆即召唤出日常密码,高效,可靠,优雅。
最后附上相应固件供参考:
Arduino 端:
GAL16V8 端:
链接:https://pan.baidu.com/s/1hcY0jfzjq_o15n17LzQZhg?pwd=1bye
提取码:1bye
-----------------------------------------------------------------------------------
以上,给 RC522 模块搞了套 GAL16V8 硬件链路,配合 Arduino-Leonardo 实现了 USB-HID 密码召唤大阵。
使用固化了特定文字的 RFID 符篆,即可轻松开启阵眼,实现笔记本电脑上刷卡解锁,刷卡剁手,刷卡....
最后祝大家刷卡愉快!
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|