You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Xamarin为NFC NTAG215标签设置密码保护

基于Xamarin实现NFC标签密码保护指南

Android 平台实现步骤

1. 配置权限

在AndroidManifest.xml中添加NFC相关权限和特性声明:

<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />

2. 标签密码设置核心代码

以Mifare Classic标签(扇区级密码保护)为例,通过Intent捕获NFC标签后执行密码设置:

protected override void OnNewIntent(Intent intent)
{
    base.OnNewIntent(intent);
    if (NfcAdapter.ActionTagDiscovered.Equals(intent.Action))
    {
        var tag = (Tag)intent.GetParcelableExtra(NfcAdapter.ExtraTag);
        var mifare = MifareClassic.Get(tag);
        try
        {
            mifare.Connect();
            // 目标扇区索引(示例为扇区4)
            int targetSector = 4;
            // 验证默认密码A(FFFFFFFFFFFF)
            bool authSuccess = mifare.AuthenticateSectorWithKeyA(targetSector, MifareClassic.KeyDefault);
            
            if (authSuccess)
            {
                // 自定义密码(6字节)
                byte[] newKeyA = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
                // 访问控制位配置(需参考对应标签 datasheet,避免锁死扇区)
                byte[] accessBits = { 0xFF, 0x07, 0x80 };
                // 扇区控制块(每个扇区最后一个块,扇区4对应块索引19)
                byte[] trailerBlock = new byte[16];
                
                // 组装控制块内容:前6字节密码A,中间3字节访问控制位,后6字节密码B
                Array.Copy(newKeyA, 0, trailerBlock, 0, 6);
                Array.Copy(accessBits, 0, trailerBlock, 6, 3);
                Array.Copy(newKeyA, 0, trailerBlock, 9, 6);
                
                // 写入控制块
                mifare.WriteBlock(19, trailerBlock);
                Toast.MakeText(this, "密码设置成功", ToastLength.Short).Show();
            }
            else
            {
                Toast.MakeText(this, "原密码验证失败", ToastLength.Short).Show();
            }
            mifare.Close();
        }
        catch (Exception ex)
        {
            Toast.MakeText(this, $"操作异常:{ex.Message}", ToastLength.Short).Show();
            mifare?.Close();
        }
    }
}

注意事项

  • 不同NFC标签的密码机制差异极大,需严格参考目标标签的官方技术文档
  • 访问控制位配置错误会导致扇区永久锁死,测试前务必确认配置规则
  • 需处理标签连接失败、写入超时等异常场景

iOS 平台实现步骤

1. 配置权限与Info.plist

添加NFC权限描述与支持的标签格式:

<key>NFCReaderUsageDescription</key>
<string>需要访问NFC标签以设置密码保护</string>
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
    <string>NDEF</string>
    <string>TAG</string>
</array>

2. 标签密码设置核心代码

以Mifare Ultralight C标签为例,通过CoreNFC框架发送APDU命令设置密码:

public class NFCManager : NFCNDEFReaderSessionDelegate
{
    private NFCNDEFReaderSession _nfcSession;

    public void StartNFCSession()
    {
        _nfcSession = new NFCNDEFReaderSession(this, null, true);
        _nfcSession.BeginSession();
    }

    public override void DidDetect(NFCNDEFReaderSession session, NFCNDEFMessage[] messages)
    {
        session.InvalidateSession();
        if (session.ConnectedTag is NFCMiFareTag mifareTag)
        {
            // 发送PWD_SET命令(设置4字节密码)
            byte[] pwdCmd = { 0xA2, 0x2B, 0x11, 0x22, 0x33, 0x44 };
            mifareTag.SendMiFareCommand(pwdCmd, (response, error) =>
            {
                if (error == null)
                {
                    // 发送PACK_SET命令(设置2字节密码确认响应)
                    byte[] packCmd = { 0xA2, 0x2C, 0x55, 0x66 };
                    mifareTag.SendMiFareCommand(packCmd, (resp, err) =>
                    {
                        Console.WriteLine(err == null ? "密码设置完成" : $"PACK设置失败:{err.LocalizedDescription}");
                    });
                }
                else
                {
                    Console.WriteLine($"密码设置失败:{error.LocalizedDescription}");
                }
            });
        }
    }

    public override void DidInvalidate(NFCNDEFReaderSession session, NSError error)
    {
        Console.WriteLine($"NFC会话失效:{error.LocalizedDescription}");
    }
}

注意事项

  • iOS仅支持前台NFC会话,需用户手动触发扫描
  • 仅iOS 13及以上版本支持完整的Mifare标签命令交互
  • 不同标签的APDU命令需严格遵循厂商规范

内容的提问来源于stack exchange,提问作者Minshad 1213

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 12:50:53