news 2026/9/13 15:00:52

把RFID卡写进手机NFC:门禁卡模拟的踩坑笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
把RFID卡写进手机NFC:门禁卡模拟的踩坑笔记

半年前整理钥匙串,我看着手边那张门禁卡,突然想试一个很多人问过的事:把RFID射频卡写进手机NFC,让出门变成只带手机。折腾了大半个月,我确实把一张自己的测试卡“搬”进了手机,也踩了一堆关于频率、加密、卡类型的坑。这篇心路小记不评价破解工具,只讲清楚能用手机NFC做什么、怎么做、什么不能做。适合两类人:一是想把自家门禁卡塞进手机试试的普通用户,二是准备在Android或uni-app上做NFC读取开发的初学者。我会把技术原理、实操步骤、常见问题都按我踩坑的顺序写清楚,尽量说人话。

1. 先分清射频卡的底细:RFID、IC卡与NFC的关系

网上查资料时,最让人头晕的是一堆名词混着用:RFID、射频卡、ID卡、IC卡、M1卡、NFC。其实它们不是一回事。RFID是“无线射频识别”的总称,只要是靠电磁场读写数据的卡,都能叫RFID卡。NFC只是在13.56MHz频段下的一个短距通信技术。手机里的NFC读卡器,本质上就是一个工作在13.56MHz的小型RFID读写装置。

1.1 频率决定命运:125kHz和13.56MHz的区别

判断一张RFID卡能不能被手机NFC处理,第一眼要看频率,而不是看形状。

常见的老式门禁卡,很多是125kHz的低频卡。这类卡芯片简单,常见的有EM4100、T5577等,业内习惯叫它们“ID卡”。它们的特点是协议极其简单,通常只保存一串固定编号,读卡器读出编号后去后台比对。低频卡的优点是便宜、稳定,缺点是基本没有加密能力,也很容易被克隆,所以新做的小区门禁系统已经越来越少用低频卡。

现在主流的门禁系统,大多用13.56MHz的高频卡,标准是ISO 14443A。这类卡的代表就是MIFARE Classic 1K,也就是大家常说的S50,还有MIFARE Plus、MIFARE DESFire以及NTAG系列标签。它们除了卡号,内部还分了扇区,可以存数据,部分扇区还能加密。手机NFC正好工作在13.56MHz,理论上能读一部分高频卡,但低频卡直接没信号。

我把两种卡的类型差异整理成了一张表,方便你对照:

项目125kHz低频ID卡13.56MHz高频IC卡
常见芯片EM4100、T5577、HID ProxMIFARE Classic S50、Plus、DESFire、NTAG21x
常见称呼ID卡、老式门禁卡IC卡、M1卡、CPU卡、NFC标签
是否支持加密基本不支持支持扇区加密、滚动码、双向认证
手机NFC是否能读通常读不到部分可读、可写、可模拟
典型门禁应用老旧小区、停车道闸新小区、写字楼、校园卡

所以,当你问“rfid门禁采用什么芯片卡”,答案要看系统年代。老系统大概率是EM4100这种低频ID卡,新系统基本是MIFARE Classic S50或更高级的CPU卡。这直接影响你后续用手机NFC模拟的难度。

1.2 手机NFC不是万能的读卡器

很多朋友以为,手机上装个App就能读所有RFID卡,实测下来真不是这样。

手机里的NFC天线很小,发射功率也受电池和认证限制,它的读卡能力比专用读卡器弱。再加上手机系统通常只开放了“读标签”这类接口,对MIFARE Classic这些卡,Android会给App一个访问入口,但能不能读完整数据,取决于卡有没有开启加密扇区,以及App有没有对应的访问密钥。

我测试时用的是Google Play里常见的NFC TagInfo和MIFARE Classic Tool。NFC TagInfo负责看卡的“身份证”,比如ATQA、SAK、UID、卡容量;MIFARE Classic Tool负责读扇区数据。对于一张没有加密的S50测试卡,这类工具能把数据完整读出来;如果卡开了加密或者用了滚动码,工具只会停在“认证失败”这一步。

至于iPhone,NFC开放程度更有限。iOS 13之后开放了部分标签读取能力,但普通用户想靠iPhone模拟一张M1门禁卡,基本只有Apple Pay生态内的特定方案,远不如Android灵活。所以本文后面的实操都以Android手机为例。

1.3 手机钱包的门禁卡模拟,才是多数人的正路

说到“把RFID射频卡写入手机NFC”,大多数人脑海里的操作,是找一个App把卡完全复制到手机,用手机代替卡片去刷门禁。

但真正的量产方案,是手机厂商钱包里的“门禁卡模拟”功能。华为、小米、三星等品牌的手机钱包里都有类似“钥匙”“门卡”的入口。当你把实体卡贴在手机背面,钱包App会读取卡的基本信息,然后在一张虚拟卡中复现这张卡的UID和必要交互逻辑。整个过程严格受厂商限制,加密卡一般直接提示“不支持”。

所以我的基本建议是:先打开手机钱包找门禁卡入口,试试能不能直接模拟。这是门槛最低、成功率也最高的路径。如果你手里的卡不在支持范围,再考虑后面的技术方案。

2. 动手前的边界与选型:哪些卡能写、哪些不能碰

在开始折腾之前,我必须先把边界说清楚。因为“RFID怎么复制”“NFC破解卡密”这类词,搜索量很高,但里面藏着大量灰色内容。

技术本身是中性的,可读卡器和M1卡都是合法商品,但“复制与自己无关的卡”可能违反小区管理规定,也可能侵犯别人的门禁权限。我给自己定的规矩很简单:只操作自己合法持有的卡片,只买商家明确标注“测试用”的空白卡,遇到读不出来的加密扇区就停止,不碰任何绕过卡密的教程。

2.1 先学会看卡的类型:ATQA、SAK和UID

开始操作前,先拿一张你确定属于自己或专门买来的空白测试卡。打开NFC TagInfo,把卡贴在手机背面,你会看到一堆参数,其中最该看的是这四项:

  • ATQA和SAK:这两个参数决定了卡属于哪个协议家族。比如MIFARE Classic 1K的SAK通常是08,NTAG系列的SAK通常是00。
  • UID:卡的唯一标识,也是门禁系统最常用来绑定人的数据。UID在出厂时固化,大部分普通用户没有能力改变它。
  • 卡容量:常见的有1K、4K,对应不同扇区数量。
  • 是否检测到NDEF:如果App显示这张卡支持NDEF,说明它可以存普通数据和链接。

新手不需要死记参数,能分清“MIFARE Classic”和“NTAG/NFC Type 2”就够了。前者常用于门禁,后者常用于洗衣贴纸、智能标签。想在电脑上看得更直观,可以买一个PN532 USB读卡器,配合NFC Reader Tool这类桌面软件读基本信息,手机端搞不定的低频卡也能用读卡器判断频率。

2.2 三条安全边界,先讲清楚

我在折腾过程中给自己定了三条硬性规则,也建议所有看到这篇文章的人遵守:

第一,只操作自己合法持有的卡片。所谓合法持有,是指你自己买的门禁卡、公司发给你并明确授权使用的工牌、你自己拿来测试的空白卡。借别人的卡拿来复制,不管出于什么理由,都越界了。

第二,只买“空白测试卡”做实验。电商平台上有大量标注“空白M1测试卡”“UID可写卡”的商品,它们是合法的开发测试耗材。但买回来应该写自己的数据,而不是去复制物业门禁卡。

第三,遇到加密扇区就停。MIFARE Classic S50虽然存在已经被公开研究过的安全弱点,但这不代表普通人应该去用破解工具。手机钱包不支持,就换路线,或者直接去物业开通官方手机开门,这是最干净的做法。

2.3 几条技术路线的对比

在实际动手之前,先弄清楚“RFID射频卡写入手机NFC”至少有四条不同路线:

路线做法难度适用场景
手机钱包模拟钱包App读实体卡,生成虚拟门禁卡极低日常替代门禁卡
Android HCE自己写App实现卡模拟较高学习协议、做Demo
写NTAG标签把数据或链接写入空白标签名片、WiFi分享、巡更
UID可写卡用读卡器修改空白卡UID较高测试兼容性,不建议乱用

很多人搜“id卡怎么写入nfc手机”,其实是被低频卡卡住了。如果实体卡是125kHz ID卡,手机NFC物理上读不到,任何软件方案都白搭。正确做法是换成IC卡门禁系统,或者让物业开一个支持NFC的手机开门权限。

3. 实操记录:把RFID卡数据写进手机NFC

下面这段是我自己走通的一条完整流程。我用的是一张空白MIFARE Classic S50测试卡,没有加密扇区,也没有动态口令,属于最简单也最合规的场景。

3.1 软硬件清单

我当时的配置如下,供你参考:

  • Android手机一台,系统版本Android 8.0以上,开启NFC。
  • 空白MIFARE Classic 1K测试卡一张,商家明确标注“测试用空白卡”。
  • NFC TagInfo,用来查看卡的类型、UID、SAK等参数。
  • MIFARE Classic Tool(MCT),用来读取和备份卡扇区数据。
  • 手机自带的钱包App,里面自带“门禁卡”功能。
  • 一台支持NFC的读卡器(可选),我后来用了PN532,主要是为了验证电脑端读取结果。

需要说明的是,MCT这类工具并不是“一按就复制”的傻瓜软件。它能否读到扇区数据,取决于卡的加密状态和访问密钥。对空白测试卡,它能正常读取;对加密卡,它只会报认证失败。这个特性其实是个很好的安全边界。

3.2 第一步:确认卡的类型和加密状态

把卡贴在手机背面,打开NFC TagInfo,App会很快识别出卡的基本参数。

我手里这张空白卡被识别成MIFARE Classic 1K,UID是4字节,SAK是08,说明它工作在13.56MHz,属于ISO 14443A协议族。这个结果很重要,意味着手机NFC硬件上能碰它。

接着打开MIFARE Classic Tool,点击“读Tag”,选择“读所有扇区”。因为空白测试卡通常使用出厂默认密钥,工具会很快读完整个卡的数据。我看到的NDEF区域全是FF或者00,属于正常的出厂状态。

如果这一步提示“认证失败”,说明这张卡有非默认加密扇区。此时不要再继续尝试什么绕过密钥。正确做法是,拿另一张确定不加密的测试卡来做实验,或者直接走手机钱包模拟。

3.3 第二步:用手机钱包完成卡模拟

确认卡可以被读取后,我开始尝试正经路线:用手机钱包模拟它。

在小米、华为等品牌手机上,流程大同小异:

  1. 打开钱包App,找到“门禁卡”或“钥匙”入口。
  2. 选择“添加门禁卡”或“模拟实体门禁卡”。
  3. 把实体卡贴在手机背面NFC区域,等待读卡进度条走完。
  4. 读卡成功后,App会让你给虚拟卡起个名字。
  5. 这张虚拟门禁卡会出现在钱包卡包里,你可以把它设为默认卡。

我实际操作时,钱包App读取的是卡的UID和基础交互信息,然后在本机安全芯片中生成了一张虚拟卡。这个过程很顺畅,全程不到半分钟。有人喜欢把它理解为“写进手机”,更准确的说法是“在手机安全芯片中生成等效卡”。用户感知上,确实等同于实体卡被写进了手机。

如果你的钱包提示“该卡不支持模拟”,不要急着换App或者找破解工具。先检查卡类型:是不是低频ID卡?是不是加密卡?是不是CPU卡?这些卡都不在普通钱包的模拟范围内。

3.4 第三步:追加一个亲测可用的读卡调试流程

如果你是想做开发调试,而不是单纯刷门禁,可以在电脑上走一遍读卡流程,代码逻辑和手机端很像。

我用PN532连接电脑,再用NFC Reader Tool读取同一张S50测试卡,结果显示的UID和扇区数据与手机端一致。这样的好处是,读取过程可以截图留档,便于后面写自动化脚本或生成测试报告。

读卡器的接线方式一般很简单,PN532通过USB转TTL或直接USB连接电脑。注意供电要稳定,有些读卡器接笔记本前置USB口会供电不足,导致识别不稳定。读卡器属于低频测试工具,配合桌面软件使用,属于正规开发流程,没必要把它和破解划等号。

3.5 验收与日常刷卡心得

模拟完成不代表结束,一定要到真实门禁上测一遍。

我的测试经验是:先保持手机亮屏,贴近读头,如果能开,再试锁屏状态。厂商钱包通常把虚拟卡放在安全芯片中,屏幕熄灭也能工作。但有些门禁读头灵敏度低,手机需要找对贴合位置,一般集中在手机背面上半部分。

最常踩的坑是“默认卡冲突”。如果你的钱包里同时有公交卡、门禁卡、银行卡,刷卡时手机可能默认弹出交通卡而不是门禁卡。解决办法是把实体门禁模拟出来的虚拟卡设为默认卡,或者开启钱包里的“智能选卡”功能。门禁卡模拟成功后,App设置里一般有“默认卡”选项,务必检查一遍。

4. 常见问题、安全防护与更多玩法

整段心路走下来,最值钱的不是“成功”那一瞬间,而是后面排查问题、补安全知识的过程。我把常见问题按发生频率从高到低排了个序。

4.1 能读卡却模拟失败,究竟卡在哪

手机显示读到了卡,但钱包提示不支持,八成是下面几个原因:

  • 卡是加密卡,扇区密钥不是默认值,厂商钱包不读取加密扇区。这种情况直接用钱包模拟基本无解,但卡还能正常刷门禁,不用焦虑。
  • 卡是CPU卡,比如部分校园卡、银行卡,协议比M1复杂,普通钱包根本没有对应的虚拟卡实现。
  • 卡的UID比较特殊,或者门禁系统还校验了其他字节,模拟出来的虚拟卡无法通过后台认证。
  • 手机钱包版本太老,厂商后来才支持某类卡,建议先升级系统和安全组件再试。

排查顺序也简单:先拿一张空白S50测试卡试钱包模拟,如果连空白卡都不行,说明是手机或钱包的问题;如果空白卡成功而实体卡失败,说明是卡的问题。

4.2 模拟成功但刷不开门禁

这是最容易让人崩溃的情况:明明手机显示模拟成功,到门口却不管用。

我先检查门禁读头是不是13.56MHz的。有些老旧门禁用125kHz低频ID卡,手机NFC频率对不上,当然刷不开。如果读头确实是高频IC卡门禁,那原因可能是门禁后台绑定的是实体卡的UID,而手机虚拟卡生成的UID和实体卡不完全一致。

还有一些门禁系统会定期滚动码,或要求刷卡时附加动态认证,这种卡即使被模拟出来,后台也能识别出异常。遇到这种情况,我的建议是直接放弃模拟,找物业或公司行政开通官方NFC权限。硬要绕过反而容易弄坏读卡记录,也给自己惹麻烦。技术不是用来对抗管理规则的。

4.3 NFC中继攻击和RFID屏蔽,值得认真说一说

因为“nfc中继攻击”是最近很多人搜的热词,我觉得有必要用防守视角解释一次。

中继攻击的基本概念是:攻击者用两个设备把卡片的电磁信号延长传输,让验证端误以为卡片就在现场。比如卡主在办公室,攻击者在地铁闸机处持有一台设备,通过中继让闸机读到远在几公里外的卡数据。这个攻击的技术门槛并不高,所以NFC相关标准越来越强调双向认证和距离判定。

普通用户能做的事很简单:不要把高权限门禁卡、银行卡放在包的最外层;在人多的地方刷卡时,用手遮挡一下读卡区域。如果你还是不放心,可以买RFID屏蔽卡套,或者在证件卡套里放一层铝箔,这能有效阻断非接触读取。像“rfid芯片怎么屏蔽”这种搜索词,正解不是去拆芯片,而是物理隔离。

要注意,屏蔽卡套不是万能的。它在停用车道、贴卡充电等场景里反而会挡信号,用完之后记得把卡取出来。

4.4 顺手的NFC玩法:写名片、读标签、uni-app读取

打通手机NFC读写流程后,你的NFC能力就不仅仅是门禁了。我用几张NTAG213空白标签,把个人博客地址和WiFi账号密码写了进去。手机靠近标签会自动弹出提示,体验很自然,适合做小批量礼品卡片。

如果你做前端开发,想在小程序或uni-app里读取NFC标签,思路也很直接。uni-app有NFC适配器接口,可以读取标签ID和技术列表。核心逻辑大致是:

uni.getNFCAdapter({ success(res) { const nfc = res.nfcAdapter; nfc.startDiscovery({ success() { nfc.onDiscovered((res) => { // res.id 是标签UID,res.techList 是支持的技术列表 console.log(res.id, res.techList); }); }, fail(err) { console.warn('NFC discovery failed', err); } }); } });

这段代码适合用来做卡片ID读取的初步验证,比如巡检签到、设备ID识别这类场景。真正要开发完整应用,还要处理权限申请、Android版本差异和iOS兼容性,建议先在真机上反复测。

从折腾到落地,我最深的体会是:RFID射频卡写入手机NFC这件事,内核不是“复制”,而是“理解”。理解卡的频率、芯片、加密状态,理解手机和钱包的限制,然后始终把合法使用放在第一位。如果你能守住这个边界,剩下的只是熟练度的积累。后面如果再进阶,可以研究Android HCE协议栈、卡模拟APDU交互,那又是一个更深也更有意思的领域。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 15:00:29

C#上位机串口Modbus温湿度采集与MySQL存储实战

简介:一套基于Modbus协议的上位机串口通信与MySQL存储的完整工程方案,面向工业监控、环境数据采集及QT上位机开发者,解决温湿度数据实时采集、动态曲线展示与历史存储查询等问题。压缩包共15个文件,包含5个C源文件(负责…

作者头像 李华
网站建设 2026/9/13 14:57:40

微信小程序地图打卡开发实战:从云函数到真机调试

简介:面向微信小程序开发学习者的“滴滴打卡”源码包,适合正在准备毕业设计或期末大作业的学生参考。资源以原生小程序结构组织,包含完整的前端页面、逻辑与样式代码,涵盖打卡类应用常见的功能模块与交互流程,可直接运…

作者头像 李华
网站建设 2026/9/13 14:56:34

Spring Boot轻量CRM骨架:JPA+Thymeleaf实战解析

简介:本资源是一套基于Java与HTML实现的轻量级CRM客户关系管理系统源码,面向Java初学者、Web开发入门者及中小企业信息化建设人员,聚焦客户信息采集、分类管理、交互记录与基础数据分析等核心需求,助力快速理解企业级客户管理系统…

作者头像 李华
网站建设 2026/9/13 14:56:06

Archon 核心概念详解:Workflow、Node、Command 与隔离机制

Archon 核心概念详解:Workflow、Node、Command 与隔离机制 【免费下载链接】Archon The first open-source harness builder for AI coding. Make AI coding deterministic and repeatable. 项目地址: https://gitcode.com/GitHub_Trending/archon3/Archon A…

作者头像 李华