Momentum-Firmware LF RFID 密钥文件格式(.rfid)完全指南
2026/9/16 17:24:25 网站建设 项目流程

Momentum-Firmware LF RFID 密钥文件格式(.rfid)完全指南

【免费下载链接】Momentum-Firmware🐬 Feature-rich, stable and customizable Flipper Firmware项目地址: https://gitcode.com/GitHub_Trending/mo/Momentum-Firmware

LF RFID(低频射频识别)模块是 Momentum-Firmware 中用于读取、保存、模拟和写入 125 kHz 低频 RFID 卡的核心功能。本指南以 LfRfidFileFormat.md 为骨架,完整解析其.rfid密钥文件的格式规范、全部受支持的关键类型,并结合仓库源码(保存/加载实现、协议注册表、EM4100 协议实现)深入讲解字段含义与底层原理。读完本文,你将能够读懂、手工编写、校验任何.rfid密钥文件,并理解固件读取与写入它的完整链路。

文件格式总览

LF RFID 密钥文件是一种纯文本格式,基于项目的通用flipper_format序列化框架编写。每个文件恰好存储一把Key type参数指定类型的 RFID 密钥,文件扩展名固定为.rfid

标准示例

一个典型的 EM4100 密钥文件内容如下:

Filetype: Flipper RFID key Version: 1 Key type: EM4100 Data: 01 23 45 67 89

版本历史

版本说明
1初始版本(Initial version)

当前固件只识别Version: 1。读取文件时若版本号不是1,加载会直接失败——该校验位于 lib/lfrfid/lfrfid_dict_file.c 的lfrfid_dict_file_load()中:

if(!flipper_format_read_header(file, str_result, &version)) break; if(furi_string_cmp_str(str_result, LFRFID_DICT_FILETYPE) != 0) break; if(version != 1) break;

即:文件头必须严格匹配Flipper RFID key(源码中定义为LFRFID_DICT_FILETYPE宏),且版本必须为1,两者任一不满足即判定文件无效。

格式字段说明

名称说明
Key type密钥协议类型(即下表所列的协议名称)
Data密钥数据(HEX 十六进制字节序列)

两个字段的详细规则如下:

  • Filetype:固定为Flipper RFID key,由 lib/lfrfid/lfrfid_dict_file.c 中的宏LFRFID_DICT_FILETYPE "Flipper RFID key"定义,保存时写入、加载时校验。
  • Version:当前唯一合法值为1
  • Key type:必须是下表 "Type" 列中的协议名称,保存时通过protocol_dict_get_name()从协议注册表取协议名写入,加载时通过protocol_dict_get_protocol_by_name()反向映射回协议 ID(见 lib/lfrfid/lfrfid_dict_file.c)。
  • Data:由flipper_format_write_hex/flipper_format_read_hex处理,前者把内存中的字节数组按每字节两位十六进制、以空格分隔写出,后者按同样规则读回(实现见 lib/flipper_format/flipper_format.c)。Data 的字节长度由协议类型决定,不是任意的——加载时固件会按该协议在注册表中的data_size读取固定数量的字节(见下文"Data 长度与协议绑定"小节)。

支持的密钥类型

原文档给出了 18 种受支持的关键类型,完整继承如下:

TypeFull name
EM4100EM-Micro EM4100
H10301HID H10301
IdteckIDTECK
Indala26Motorola Indala26
IOProxXSFKantech IOProxXSF
AWIDAWID
FDX-AFECAVA FDX-A
FDX-BISO FDX-B
HIDProxGeneric HIDProx
HIDExtGeneric HIDExt
PyramidFarpointe Pyramid
VikingViking
JablotronJablotron
ParadoxParadox
PAC/StanleyPAC/Stanley
KeriKeri
GallagherGallagher
GProxIIGuardall GProx II

需要特别说明的是,lib/lfrfid/protocols/lfrfid_protocols.h 中定义的LFRFIDProtocol枚举实际包含更多协议(如EM4100/32EM4100/16ElectraIndala224NexwatchSecurakeyNoralsyInstaFob等),协议注册表lfrfid_protocols[]中也有对应实现。上表是原文档明确收录的类型清单;在最新固件中,你实际能保存/加载的类型以协议注册表为准,可在 lib/lfrfid/protocols/ 目录下看到每个协议独立的.c/.h实现文件(如protocol_em4100.cprotocol_h10301.cprotocol_fdx_a.c等)。

文件存放位置与命名规则

  • 默认目录/ext/lfrfid(SD 卡根目录下的lfrfid文件夹),定义于 applications/main/lfrfid/lfrfid_i.h 的宏LFRFID_APP_FOLDER
  • 扩展名.rfid,由宏LFRFID_APP_FILENAME_EXTENSION ".rfid"定义(applications/main/lfrfid/lfrfid_i.h)。
  • 自动命名:保存新卡时,固件会用协议名做前缀(替换其中的/和空格为_,并截断到 11 个字符),再调用name_generator_make_auto()自动生成完整文件名,见 applications/main/lfrfid/scenes/lfrfid_scene_save_name.c。
  • 文件校验:保存场景使用validator_is_file校验器,强制目标文件以.rfid结尾,避免误存为其他扩展名。
  • 影子文件:与.rfid相伴的还有.shd(shadow)文件,用于记录原始读卡信息,与密钥文件本身相互独立。

在文件浏览器(lfrfid.c中的browser_options)中,固件会把基础路径指向LFRFID_APP_FOLDER,并将扩展名过滤器设置为.rfid(见 applications/main/lfrfid/lfrfid.c),因此你只能从该目录选择.rfid文件进行加载。

保存与加载的底层实现

.rfid文件的读写逻辑集中在 lib/lfrfid/lfrfid_dict_file.c 中,对外只暴露两个接口(声明见 lib/lfrfid/lfrfid_dict_file.h):

bool lfrfid_dict_file_save(ProtocolDict* dict, ProtocolId protocol, const char* filename); ProtocolId lfrfid_dict_file_load(ProtocolDict* dict, const char* filename);

保存流程(lfrfid_dict_file_save)

  1. 打开目标文件(flipper_format_file_open_always,覆盖写入);
  2. 写入文件头Filetype: Flipper RFID keyVersion: 1
  3. 通过protocol_dict_get_name()取得协议名,写入Key type
  4. 通过protocol_dict_get_data_size()取得该协议的数据长度,分配对应大小的缓冲区,再经protocol_dict_get_data()取出密钥原始字节;
  5. 调用flipper_format_write_hex以十六进制文本写入Data

可见Data 字段写入的字节数严格等于该协议注册的data_size,保存与加载是对称的。

加载流程(lfrfid_dict_file_load)

  1. 打开文件并读取头部,校验FiletypeVersion(必须是1);
  2. 读取Key type字符串,调用protocol_dict_get_protocol_by_name()反查协议 ID;
  3. 若协议名无法识别(返回PROTOCOL_NO),则尝试"兼容回退"映射(见下节);仍失败则整体加载失败;
  4. 否则按该协议的data_size调用flipper_format_read_hex读回固定长度的密钥字节,写入协议字典,返回协议 ID。

Data 长度与协议绑定

不同协议的data_size各不相同。以 EM4100 为例,其解码数据固定为 5 字节(EM4100_DECODED_DATA_SIZE (5),见 lib/lfrfid/protocols/protocol_em4100.c),所以示例文件Data: 01 23 45 67 89正好是 5 字节。手工编辑文件时,务必保证 Data 字节数与协议匹配,否则flipper_format_read_hex在严格模式下会读取失败。

兼容性回退机制:I40134 → Indala26

源码中实现了一个有趣的兼容层:当Key type写的是旧名称I40134时,加载器不会直接报错,而是通过lfrfid_dict_protocol_fallback()将其映射为LFRFIDProtocolIndala26(见 lib/lfrfid/lfrfid_dict_file.c)。

该回退不仅改名,还做了数据格式转换:读取 3 字节原始数据后,通过lfrfid_dict_protocol_indala_data()把 Indala 的位序重排为内部 29 位布局,同时计算并写入 Indala 校验和(indala checksum)与 Wiegand 奇偶校验位(even/odd parity),再调用protocol_dict_set_data()写入字典。这保证了老版本固件创建的旧格式文件在新固件中仍可无缝加载。

以 EM4100 为例:从文件到协议实现

结合 lib/lfrfid/protocols/protocol_em4100.c 可以看清.rfid文件中的数据在固件内部如何被使用:

  • 协议注册const ProtocolBase protocol_em4100 = { .name = "EM4100", .manufacturer = "EM-Micro", .data_size = 5, ... }定义了协议名EM4100与 5 字节数据尺寸,这正是文件中Key typeData的来源(protocol_em4100.c)。
  • 编码与解码:EM4100 使用 Manchester 编码。em4100_decode()从 64 位编码帧中解析出 9 位引导头 + 10 行数据(每行 4 数据位 + 1 奇偶校验位),最终还原为 5 字节;em4100_can_be_decoded()会校验行奇偶与列奇偶,任一校验失败即拒绝解码。
  • 显示渲染protocol_em4100_render_data()会把 5 字节数据格式化输出为FC: xxx Card: xxxxx、8 位十进制与 10 位十进制三种视图(protocol_em4100.c),方便在界面上直接核对卡号。
  • 写入支持protocol_em4100_write_data()同时支持 T5577 与 EM4305 两种可写标签,把 5 字节数据重新编码为 64 位帧并拆分为块/字写入(protocol_em4100.c),这是"模拟/写入"功能的底层来源。

实操要点速查

  1. 手工创建密钥文件:在 SD 卡/ext/lfrfid/下新建文本文件,命名以.rfid结尾,按上述格式填入FiletypeVersionKey typeData四行即可,注意每行用\n换行,Data 为空格分隔的十六进制字节。
  2. 修改现有密钥:优先通过固件"编辑"流程(lfrfid.clfrfid_scene_save_name_on_event会先删除旧文件再保存),避免手工改动导致校验失败。
  3. Data 长度对齐:Data 字节数必须等于对应协议的data_size(如 EM4100 为 5 字节),否则加载时报错。
  4. 协议名大小写敏感Key type必须与协议注册名完全一致(如EM4100H10301IOProxXSFPAC/Stanley),唯一例外是旧名I40134会通过回退机制自动转换为 Indala26。

延伸阅读

  • 同目录下的其他文件格式文档:NfcFileFormats.md、iButtonFileFormat.md、SubGhzFileFormats.md、InfraredFileFormats.md
  • 协议实现源码:lib/lfrfid/protocols/ 目录下的protocol_*.c文件
  • 文件读写核心:lib/lfrfid/lfrfid_dict_file.c
  • 通用序列化框架:lib/flipper_format/flipper_format.h
  • 应用入口与常量定义:applications/main/lfrfid/lfrfid.c 与 applications/main/lfrfid/lfrfid_i.h
  • 低频标签写入工具:T5577 / EM4305 相关实现见 lib/lfrfid/tools/

【免费下载链接】Momentum-Firmware🐬 Feature-rich, stable and customizable Flipper Firmware项目地址: https://gitcode.com/GitHub_Trending/mo/Momentum-Firmware

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询