
一个实验教你怎么锁住数据一个实验教你怎么验明正身。两张卡片的距离就是安全体系从你有什么走到你是谁的距离。引子这轮两个实验主题都是安全- B04 RFID 读写加密实验RC522 读卡器 DES 加密给卡里的数据上锁- B05 生物识别实验AS608 指纹模块让你的指纹变成钥匙。一个是数据安全卡里的内容不许别人看一个是身份安全只有你能通过验证。它们回答的是同一个问题的两个面凭什么相信这张卡/这个人而且这两个实验的技术跨度也很大B04 还是经典的裸机大循环 按键状态机B05 已经切换成 LiteOS 多任务 WiFi 上云。顺着这个顺序读代码正好把单机应用 → 系统应用的差距看得很清楚。一、B04RFID 读写加密——给卡片数据上把 DES 锁1. 先看主框架裸机 按键模式状态机main 的结构非常教科书初始化 → 每秒轮询一次 RC522 → 按键实时检测。while (1){Key_Task(); // 按键检测决定工作模式if ((HAL_GetTick() - tickstart) 1000){tickstart HAL_GetTick();RC522_Handle(); // RFID 综合处理led_toggle(LED1_Pin);}}核心设计是 RCC522_Work_Mode 工作模式状态机按键 模式 功能KEY1 1 数据加密明文 → DES 密文 → 写入卡片KEY2 2 数据解密读密文 → DES 解密 → 显示明文KEY4 0 卡片初始化新卡先初始化才能用屏幕和串口都会提示请先按键设置功能再刷卡——先选模式、再刷卡这是整个实验的使用流程。2. 读卡四步曲寻卡 → 防冲撞 → 选卡 → 认证RC522 读卡不是往那一放就读而是分步走的协议流程status RC522_Search_Cards(PICC_REQALL, card_type); // ① 寻卡感应区内有没有卡if (status MI_OK){status RC522_Anticoll(card_id); // ② 防冲撞多卡同时出现时选一张拿到卡号}if (status MI_OK){// ③ 选定卡 → ④ 密钥认证 → 读/写数据块}这是理解射频识别RFID的关键射频信道是共享的多张卡同时在场会冲撞必须靠防冲撞算法逐张选出来——和人多说话会吵一样通信协议要先解决谁先说。3. 卡内结构16 个扇区每扇区 4 块代码注释把 M1 卡的存储结构写得明明白白- 卡分 16 个扇区每扇区 4 块块 0/1/2 是数据块块 3 是控制块/密钥块共 64 块按绝对地址 0~63 编号- 第 0 扇区的块 0 存放厂商代码出厂固化不可更改- 本实验默认使用 Sector ID 1Block ID 0、1块 0 存数据块 1 存加密标志- 初始密钥 Pass_Word {0xFF x 6}出厂默认。经典警告代码原话切忌往每个扇区的块 3 写数据——它是密码区有指定数据格式乱写会导致扇区无法访问、直接废掉。这是 RFID 实验的高压线。4. DES 加密数据的锁与钥匙加密用 DES 对称加密算法des.c/des.h密钥是 8 字节uint8_t Key_des {0x12,0x34,0x56,0x78,0x12,0x34,0x56,0x78}; // DES 8 字节密钥uint8_t Block_Date {123456}; // RFID 卡原始明文数据加密流程KEY1 按下 刷卡RC522_Read_Date(块0地址, card_date); // 读卡片原有数据memcpy(blockdata, card_date, 16); // 拷到缓存if (块1 数据 0x5A 块1 数据 0xA5) // 检查是否已加密{printf(RFID卡数据已加密无需再次加密\r\n); // 已加密则拒绝重复操作return;}Process_Message(blockdata, des_encryptiondata, Key_Sets, ENCRYPTION_MODE); // DES 加密/* 加密数据写入块 00x5A 0xA5 标志写入块 1 */解密流程KEY2 按下 刷卡则反过来读密文 → DECRYPTION_MODE 解密 → 明文显示同时清掉加密标志。加密、解密、初始化三个模式共用同一个 RC522_Handle()靠 RCC522_Work_Mode 分流成功时蜂鸣器提示BEEP_RING()。这个实验的价值RFID 卡本身没有密码保护你的数据的能力只有扇区密钥认证。真正让123456这串数据在卡里不可读的是应用层加的 DES 加密——把明文换成密文再存卡读卡器拿到手也是一堆乱码。这就是数据在存储环节加密的完整落地。二、B05生物识别——你的指纹就是钥匙B05 的工程一打开就是熟悉又陌生的味道LiteOS、LOS_KernelInit、esp8285.h、ocprotocol.h——和上一轮的电子围栏是同一套平台骨架只是业务从围栏换成了指纹。1. 三个任务各管一摊HAL_Init();sysclkinit();task_view_init(); // 显示任务初始化task_control_init(); // 控制任务初始化task_finger_init(); // 指纹任务初始化AS608 读状态引脚LOS_KernelInit();creat_control_task(); // 控制任务creat_view_task(); // 显示任务creat_finger_task(); // 指纹任务LOS_Start();- finger_task指纹模块的采集与业务录/删/查/比对- control_task按键、网络状态等控制逻辑- view_taskLCD 分页显示状态页 / 调试页屏显指纹传感器实验。2. finger_task 的可靠性设计指纹任务循环里有两个细节值得单独拿出来讲① 首启清库任务第一次运行时先 Del_FR() 清空指纹库保证从干净状态开始避免上一次实验残留的指纹干扰判断。if (first_flag){first_flag 0;Del_FR(); // 首次启动清空指纹库LOS_TaskDelay(100);}② 模块握手重连AS608 是独立指纹模块UART 串口通信掉线是常态所以每次操作前先握手失败就重试、最多 5 次while (PS_HandShake(AS608Addr)){DEBUG_PRINT(MODULE_AS608, Cannot connect with AS608!);LOS_TaskDelay(200);i;if (i 5) { i 0; break; } // 重试 5 次放弃}设备外设不是插上就永远在线的——这是从裸机思维走向系统思维的重要一课真实系统要把设备不在线当作正常情况来处理。3. 四大功能录、删、查、比对按键 按压对应指纹的完整生命周期操作 函数 说明KEY1 Add_FR() 录指纹按提示按压两次采集特征入库KEY2 Del_FR() 删指纹KEY4 PS_ValidTempleteNum(ValidN) 查指纹库剩余容量AS608Para.PS_max - ValidN直接按压 Finger_press() 实时比对按一下模内比对返回匹配结果每一步都有蜂鸣器反馈Beep_Ringing()beep 400ms按压成功/失败通过不同提示音区分——好的交互设计在嵌入式里也一样重要。4. 上云识别结果不止留在本地工程里挂着 esp8285.hWiFi 模组和 ocprotocol.hOC 云协议指纹/控制任务的结果可以通过 WiFi 上报平台配合 view_task 的模块状态/调试信息分页这已经是一个可以远程查看状态的指纹门禁系统雏形了。三、主线两种钥匙同一套安全逻辑把两个实验并排看会发现它们惊人地互补维度 B04 RFID 读写加密 B05 生物识别认证依据 你持有的卡something you have 你本身的指纹something you are核心模块 RC52213.56MHzSPI AS608UART 串口数据保护 DES 对称加密明文→密文落卡 指纹特征模板不可逆存储编程模型 裸机大循环 按键状态机 LiteOS 多任务交互 LCD 串口 蜂鸣器 LCD 分页 蜂鸣器 WiFi 上云防呆设计 已加密标志 0x5A/0xA5 防重复加密 首启清库 握手重连防失效看懂这张表就看懂了这个领域- 卡认证解决认物卡可以复制、可以借、可以丢所以必须在数据层加 DES 加密——锁住的是内容- 生物认证解决认人指纹复制不了、丢不了锁住的是身份- 两者的工程骨架是同一套先握手上电 → 检测/录入 → 本地验证 → 反馈蜂鸣器/LCD→可选上报云平台。而且 B05 的 LiteOS 三任务结构和上一轮电子围栏几乎同构——说明这套平台已经把传感器/模块接入 多任务 上云做成了可复用的工程模板换一个业务模块就是换一个任务而已。这对从实验到产品的理解特别有价值。四、踩坑记录给后来人1. 别碰块 3密钥块M1 卡的 3/7/11/.../63 号块是密码区格式特殊乱写会永久废掉扇区。写数据前先背下数据块 0/1/2、控制块 3的划分。2. 新卡先初始化出厂卡可能没有有效的扇区密钥结构直接加密会失败。main 里专门提示如果是新卡请先进行初始化操作——KEY4 初始化是第一步不是可选项。3. 防冲撞不是可省的步骤多张卡同时放在感应区时没有 RC522_Anticoll 拿不到唯一卡号。做多卡场景时这个步骤的位置不能动。4. 加密要有已加密标志B04 用块 1 的 0x5A 0xA5 标记卡是否已加密重复加密会被拒绝。任何只做一次的写入操作都要有幂等保护否则重按一次按键数据就毁了。5. 指纹模块会掉线要握手重连AS608 每次操作前 PS_HandShake失败重试 5 次。裸机思维是假设设备永远在线系统思维是设备掉线是常态必须有重连策略。6. 首启要清库指纹模块的 Flash 里存的是上一次实验的指纹。B05 用 first_flag 在任务启动时清一次库——初始化状态要显式建立不能赌出厂是干净的。7. RTOS 里别用 HAL_Delay 死等finger_task 里所有等待都是 LOS_TaskDelay()让出 CPU 给其他任务。这和上一轮围栏实验的教训一致是裸机 → RTOS 最常见的迁移错误。五、写在最后两个实验做下来最大的感悟是安全在嵌入式里从来不是一个算法而是一个闭环。B04 告诉我们闭环是——密钥 加密 存储 标志位光有 DES 算法不够还要决定把密文放哪个块、用什么标志防止重复加密、新卡怎么初始化缺一环都不成立。B05 告诉我们闭环是——采集 存储 比对 反馈 上云指纹模块只是眼睛真正让它成为门禁的是任务调度、重连机制、蜂鸣器反馈和云平台上报这一整套工程。如果把这几轮实验连起来看主线就更清楚了从读传感器数据从哪来到加密存储数据怎么保护再到生物识别身份怎么验证——一块板子正在一步步逼近真实的物联网产品。下一步的方向也很自然- 把 B04 的加密卡和 B05 的指纹组合成刷卡 指纹双重认证门禁系统标准做法- 指纹比对结果通过 OC 协议上报云端做远程开门、访客记录- 把 B04 的 DES 密钥从固定写死升级为密钥动态下发进一步贴近真实安全设计。到那时刷卡刷指纹就真的变成一个可以落地的产品了。