我想使用NfcA在MIFARE Ultralight EV1(MFOUL21)标签上设置和取消设置密码保护吗? Android上的标签技术.

我知道我会为此使用nfcA.transceive()方法,但是我不确定该方法的参数是什么,所以有人可以提供代码段来设置和取消设置密码吗?

更新:

关于TapLinx库,我基本上希望使用nfcA.transceive(…)代码段,其等效于:

> ultralightEV1.programPwd(passwordBytes);

> ultralightEV1.programPack(packBytes);

> ultralightEV1.enablePasswordProtection(enabled,fromPageNum);

> ultralightEV1.authenticatePwd(passwordBytes);

解决方法:

认证

ultralightEV1.authenticatePwd(passwordBytes);

为了使用MIFARE Ultralight EV1标签(或NTAG21x)的密码进行身份验证,您需要发送PWD_AUTH(0x1B)命令(并可能验证PACK响应是否符合您的期望):

byte[] pass = { (byte)0x12, (byte)0x34, (byte)0x56, (byte)0x78 };

byte[] pack = { (byte)0x9A, (byte)0xBC };

byte[] response = nfc.transceive(new byte[] {

(byte) 0x1B, // PWD_AUTH

pass[0], pass[1], pass[2], pass[3]

});

if ((response != null) && (response.length >= 2)) {

// success

byte[] packReceived = Arrays.copyOf(response, 2);

if (Arrays.equal(packReceived, pack)) {

// PACK verified, so tag is authentic (not really, but that whole

// PWD_AUTH/PACK authentication mechanism was not really meant to

// bring much security, I hope; same with the NTAG signature btw.)

}

}

设置密码和密码确认

ultralightEV1.programPwd(passwordBytes);

ultralightEV1.programPack(packBytes);

对于MF0UL11,密码位于第0x12页,密码确认(PACK)位于第0x13页(配置页从0x10开始).对于MF0UL21,密码位于第0x27页,密码确认(PACK)位于第0x28页(配置页从0x25开始).

为了动态地发现您的标签是MF0UL11还是MF0UL21,您可以发送GET_VERSION(0x60)命令:

int cfgOffset = -1;

byte[] response = nfc.transceive(new byte[] {

(byte) 0x60 // GET_VERSION

});

if ((response != null) && (response.length >= 8)) {

// success

if ((response[0] == (byte)0x00) && (response[1] == (byte)0x04)) {

// tag is from NXP

if (response[2] == (byte)0x03) {

// MIFARE Ultralight

if ((response[4] == (byte)0x01) && (response[5] == (byte)0x00) {

// MIFARE Ultralight EV1 (V0)

switch (response[6]) {

case (byte)0x0B:

// MF0UL11

cfgOffset = 0x010;

break;

case (byte)0x0E:

// MF0UL11

cfgOffset = 0x025;

break;

default:

// unknown

break;

}

}

}

}

}

找到配置页面的开始后,可以使用WRITE(0xA2)命令更新这些页面的值(假设您已使用当前密码进行了身份验证,或者配置页面未受保护):

byte[] response = nfc.transceive(new byte[] {

(byte) 0xA2, // WRITE

(byte)((cfgOffset + 2) & 0x0FF), // page address

pass[0], pass[1], pass[2], pass[3] // new page data

});

response = nfc.transceive(new byte[] {

(byte) 0xA2, // WRITE

(byte)((cfgOffset + 3) & 0x0FF), // page address

pack[0], pack[1], (byte)0x00, (byte)0x00 // new page data (always need to write full page)

});

启用密码保护

ultralightEV1.enablePasswordProtection(enabled, fromPageNum);

为了启用密码保护,您需要配置需要密码的第一页(AUTH0,MF0UL11 /页0x25 MF0UL21在页0x10上的字节3),并且需要配置保护模式(PROT,on字节0的位7). MF0UL11的第0x11页/ MF0UL21的第0x26页).

通常,您通常会先读取(READ(0x30)命令)这些页面的旧值,更新受影响的位和字节,然后将新值写入标记:

int fromPageNum = 4;

boolean enableProtection = true;

boolean enableReadProtection = true;

byte[] response = nfc.transceive(new byte[] {

(byte) 0x30, // READ

(byte)(cfgOffset & 0x0FF) // page address

});

if ((response != null) && (response.length >= 16)) {

// success

// NOTE that READ will return *4 pages* starting at page address

byte auth0 = (byte)0xFF;

if (enableProtection || enableReadProtection) {

auth0 = (byte)(fromPageNum & 0x0FF);

}

byte[] writeResponse = nfc.transceive(new byte[] {

(byte) 0xA2, // WRITE

(byte)((cfgOffset + 0) & 0x0FF), // page address

response[0], response[1], response[2], auth0 // new page data

});

byte access = (byte)(response[4] & 0x07F);

if (enableProtection && enableReadProtection) {

access |= (byte)0x80;

}

byte[] writeResponse = nfc.transceive(new byte[] {

(byte) 0xA2, // WRITE

(byte)((cfgOffset + 1) & 0x0FF), // page address

access, response[5], response[6], response[7], // new page data

});

}

标签:authentication,nfc,mifare,android,tags

来源: https://codeday.me/bug/20191111/2018876.html

android 代码设置密码,android-如何在MIFARE Ultralight EV1标签上设置和取消设置密码?...相关推荐

  1. android 代码浅黄色,Android工程中让人很不爽的“黄色警告”

    一些黄色警告 在XML中: 警告信息:[I18N] Hardcoded string "Button" , should use @string resource 意思大概是: 按 ...

  2. android 代码 shape,Android Shape控件美化实现代码

    如果你对Android系统自带的UI控件感觉不够满意,可以尝试下自定义控件,我们就以Button为例,很早以前Android123就写到过Android Button按钮控件美化方法里面提到了xml的 ...

  3. android 代码植入,Android Studio之Debug(一):运行期代码植入

    我们开发中经常使用IDE的Debug功能,使用最频繁的就是断点查看变量内容,这篇文章主要是介绍在Debug时很常用的一些功能,如Debug变量更新.动态代码植入等. 背景 看下面一段代码 @Data ...

  4. android 代码水印,Android实现为图片添加水印

    本文实例为大家分享了Android实现为图片添加水印的具体代码,供大家参考,具体内容如下 添加水印的方法挺简单的,具体内容如下 public class MainActivity extends Ap ...

  5. android 代码功能测试,Android触屏测试实例代码

    本文实例详细描述了Android触屏测试代码,可实现对触屏的点击.移动.离开等事件的处理,对于Android初学者有很好的借鉴价值. 具体功能代码如下: package com.test; impor ...

  6. android 代码植入,Android Studio之Debug运行期代码植入的方法

    我们开发中经常使用IDE的Debug功能,使用最频繁的就是断点查看变量内容,这篇文章主要是介绍在Debug时很常用的一些功能,如Debug变量更新.动态代码植入等. 背景 看下面一段代码 @Data ...

  7. android 代码 drawable,Android Drawable完全解析(一):Drawable源码分析(中)

    呃...我不是故意要凑篇幅写个什么上下篇,实在是因为Drawable源码有点长,一篇写不下啦O(∩_∩)O~ 鉴于源码一般较长,以后所有源码分析的部分,英文注释非必要情况都不再保留! 2:Drawab ...

  8. android代码apkxiazai1,Android基础新手教程——1.10 反编译APK获代替码amp;资源(示例代码)...

    Android基础新手教程--1.10 反编译APK获代替码&资源 标签(空格分隔): Android基础新手教程 本节引言: "反编译Apk".看上去好像好像非常高端的样 ...

  9. android 代码功能测试,Android app 功能代码覆盖率--Jacoco

    Jacoco 覆盖率主要是进行功能测试来统计下所覆盖率的类,方法等,是一种辅助评估项目质量,风险及用例设计是否完善的方法.切记,Jacoco 覆盖率并不是指单元测试覆盖率: 运用场景:1.通过自己打包 ...

最新文章

  1. Redis最佳实践:7个维度+43条使用规范,带你彻底玩转Redis | 附实践清单
  2. java51游戏_简单实现美空军也得玩的游戏-谁能坚持超过50秒?(Java)
  3. 中只有负下标里才能有零_门诊营销第一人武威名:诊所如何提升成交率之零风险承诺的运用?...
  4. 一个好用的Visual Studio Code扩展 - Live Server,适用于前端小工具开发
  5. 前端学习(1407):多人管理27代码优化
  6. 终于把公司的底裤扒了!
  7. [大数据行业应用发展前景分析] 阿里潘永花报告:大数据产业将成为新的煤和石油介绍...
  8. PSVR透露下一步计划,不做内容改做声控
  9. 米哈游web前端面试题Js/Vue/浏览器原理等
  10. 《工业控制系统信息安全防护指南》产品措施匹配表
  11. ROS机器人操作系统学习笔记(三)ROS通信架构
  12. 无服务计算的未来和挑战: A Berkeley View on Serverless Computing
  13. 【牛客】凤凰【交并集】
  14. 机器学习 Study Jam 第三季报名启动!组队通关,快乐 x 3!
  15. 章子怡谈生活:渴望有自己的小孩
  16. Rose2003运行出现 -2147417848 (80010108)':Automation 错误
  17. 【华为机考】专题突破 第一周:单调栈 739 、503 、901、84
  18. js 延迟几秒执行ifarme_用JS控制iframe里的页面,做到3秒自动换一个。
  19. 开关灯问题(python)实现
  20. 人体动作识别、预测常用骨架数据集小结

热门文章

  1. python是什么意思中文、好学吗-零基础学python难吗?好学吗?
  2. c语言程序0到1000的素数,C语言实现之100-1000以内素数的等差数列
  3. 车牌识别,车辆检测,车牌检测和识别,与车相关的点点滴滴
  4. 二十五个软件测试经典面试题,你确定不收藏一波?
  5. Word格式处理控件Aspose.Words for .NET教程——设置字体格式并获取行距
  6. python批量修改替换文件内容
  7. 手机上如何使用Termux当终端,以及开启SSH服务的步骤
  8. 电磁场仿真软件ANSYS Electronics下载附安装教程
  9. 大数据营销在旅游行业的应用方案
  10. 2021大数据工程师就业前景及发展方向分析