安卓 NFC 主机卡模拟
安卓 NFC 卡模拟
StackOverFlow:Android HCE: are there rules for AID?
主机卡模拟Demo
第一步
新建类CardEmulatorService 继承 HostApduService,实现方法
public byte[] processCommandApdu(byte[] commandApdu, Bundle extras)
@Override
public byte[] processCommandApdu(byte[] commandApdu, Bundle extras) {byte[] ret = null;Log.d("cyb", "processCommandApdu commandApdu=" + Hex.toHexString(commandApdu));Toast.makeText(getApplicationContext(), Hex.toHexString(commandApdu), Toast.LENGTH_SHORT).show();String MF_NAME = "1PAY.SYS.DDF01";byte[] selectMF = Hex.hexToBytes("00A404000E" + Hex.toHexString(PbocCmd.MF_Name) + "00");Log.d("cyb", "processCommandApdu selectMF=" + Hex.toHexString(selectMF));if(Arrays.equals(commandApdu, selectMF)){ // 选择MFret = Hex.hexToBytes("6F15840E315041592E5359532E4444463031A5038801019000");}else if(Arrays.equals(commandApdu, Hex.hexToBytes("00A40000023F0100"))){ // 选择应用ret = Hex.hexToBytes("6F088400A5049F0801029000");}else if(Arrays.equals(commandApdu, Hex.hexToBytes("00A4000002000400"))){ // 选择文件ret = Hex.hexToBytes("9000");}else if(Arrays.equals(commandApdu, Hex.hexToBytes("00B0000000"))){ // 读文件ret = Hex.hexToBytes("4F545142475535394352555245304D369000");}Log.d("cyb", "processCommandApdu ret=" + Hex.toHexString(ret));return ret;
}
第二步
在res/xml 文件夹新建aid_list.xml
<?xml version="1.0" encoding="utf-8"?>
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"android:description="@string/service_name"android:requireDeviceUnlock="false"><aid-group android:description="@string/card_title" android:category="other"><!--应用名称 1PAY.SYS.DDF01 对应的二进制--><aid-filter android:name="315041592E5359532E4444463031"/></aid-group></host-apdu-service>
第三步
在AndroidManifest.xml中配置Service
<uses-permission android:name="android.permission.NFC" /><uses-featureandroid:name="android.hardware.nfc"android:required="true" />
<uses-featureandroid:name="android.hardware.nfc.hce"android:required="true" /><!-- Service for handling communication with NFC terminal. --><serviceandroid:name=".CardEmulatorService"android:exported="true"android:permission="android.permission.BIND_NFC_SERVICE"><!-- Intent filter indicating that we support card emulation. --><intent-filter><action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE" /><category android:name="android.intent.category.DEFAULT" /></intent-filter><!-- Required XML configuration file, listing the AIDs that we are emulating cardsfor. This defines what protocols our card emulation service supports. --><meta-dataandroid:name="android.nfc.cardemulation.host_apdu_service"android:resource="@xml/aid_list" /></service>
读卡器代码
println("++++++++++++++ start ++++++++++++++++");
println("开始读文件...");
isoDep.connect();
Log.d("cyb", "Hex.toHexString(PbocCmd.MF_Name)=" + Hex.toHexString(PbocCmd.MF_Name));
// byte[] select_mf = PbocCmd.selectByName(isoDep, PbocCmd.MF_Name);
byte[] select_mf = PbocCmd.selectByName(isoDep, PbocCmd.MF_Name);
println("选择MF返回值=" + Hex.toHexString(select_mf));
if (IsoDepUtils.isNoError(select_mf)) {// 选择应用byte[] appId = {0x3F, 0x01};byte[] response = PbocCmd.selectById(isoDep, appId);if (IsoDepUtils.isNoError(response)) {println("选择文件=" + Hex.toHexString(appId));println("选择文件返回值=" + Hex.toHexString(response));println("卡文件名称=" + new SelectResult(response).getName());byte[] fileId = {0x00, 0x04};// 选择文件byte[] response_f = PbocCmd.selectById(isoDep, fileId);if (IsoDepUtils.isNoError(response_f)) {println("选择文件=" + Hex.toHexString(fileId));println("选择文件返回值=" + Hex.toHexString(response_f));println("卡文件名称=" + new SelectResult(response_f).getName());byte[] read = PbocCmd.readBinary(isoDep);if(IsoDepUtils.isNoError(read)){println(Hex.toHexString(read));println(new String(read, "utf-8"));}}}
}
println("++++++++++++++ end ++++++++++++++++\n\n\n\n\n");
isoDep.close();
安卓 NFC 主机卡模拟相关推荐
- 微信小程序 NFC HCE卡模拟
PS:文章已迁移至 www.youbiguo.com 需要实现带模拟一张智能卡(门禁卡或者其他业务卡),使用带NFC设备根据指定协议进行读取模拟卡数据(效果图如下): 1. 模拟卡设计 这里使用设备自 ...
- nfc 简单卡模拟demo
NFC卡模拟是一个功能强大且的NFC卡模拟器,可模拟各类门禁卡.电梯卡.部分公司(工厂)工卡或饭卡.部分学校饭卡.部分图书馆借书卡等各类IC卡,用手机替代卡片去刷门禁.刷电梯.刷考勤和刷饭堂等等,支持 ...
- 微信小程序接入NFC,使用HCE模拟主机卡完成NFC刷卡发送消息
NFC相信大家都很熟悉,现实中经常使用的门禁卡,公交卡,地铁卡,饭卡等都是采用NFC功能,那么你知道吗,NFC也可以用微信小程序来实现.使用微信小程序可以读取/写入让手机成为一个刷卡器,也可以使用微信 ...
- HCE知识盘点:大事记、NFC卡模拟、与SE兼容
[导读] NFC是"近场通讯"的简称,采用短距离RF(射频)通讯技术. 关键词: NFC智能手机 NFC技术发展 NFC是"近场通讯"的简称,采用短距离RF(射 ...
- 在安卓系统上使用NFC技术的模拟M1卡的探索之路
先说下背景,公司的厂内物流系统,通过自助制卡,获取一张IC卡,该卡关联运输任务信息.然后司机携带这张IC卡去园区内进行装卸货.装卸货系统通过IC卡读取器,读取卡号,然后调用物流系统的接口,获取运输任务 ...
- id nfc模拟_NFC卡模拟app-NFC卡模拟安卓版下载v6.0.0 - 7230手游网
NFC卡模拟app是款功能强大的模拟卡片软件,软件非常的实用,模拟各种卡,操作起来非常的方便,只需一个手机就能使用多种卡,喜欢的话快来下载吧. 软件介绍 NFC卡模拟是一款功能十分强大的免费模拟卡片的 ...
- android的nfc卡模拟开发
这是andorid官方文档对于卡模拟方式的描述: https://developer.android.google.cn/guide/topics/connectivity/nfc/hce 有两种方式 ...
- html调用手机NFC,NFC门禁模拟-教你用NFC手机模拟门禁卡
注意,本文针对未加密门禁模拟,加密门禁请看这里: 使用本程序可以让手机的NFC模拟各种门禁卡片,从而可以用手机代替门禁卡,文末提供演示.我默认用户朋友都是IT高手,所以小白请学习相关知识后再入坑. 使 ...
- 加密卡华为怎么模拟_华为手机怎么复制加密NFC门卡?
原标题:华为手机怎么复制加密NFC门卡? "极客谈科技",全新视角.全新思路,伴您遨游神奇的科技世界. 虽然NFC已经成为了中高端手机的标配之一,但是很多人对于什么是NFC,NFC ...
最新文章
- vue 动态生成路由菜单(从后端请求到菜单数据,生成左侧菜单栏)
- 塔利亚菲科 ajax,[欧冠小组赛第4轮]阿贾克斯 3-1 中日德兰
- 在OperaMasks中使用ELite和JRuby动态语言的秘笈
- python密码学编程pdf-Python密码学编程PDF电子书免费下载
- 1132 Cut Integer (20 分)【难度: 简单 / 知识点: 模拟】
- ios 系统状态栏样式修改_iOS设置状态栏样式,statusBarStyle
- centos配置ntp时间同步_Linux CentOS配置ntpd时间同步
- mysql AUTO_INC 是否锁_AUTO-INC锁的一些思考
- 那些你不知道的 LVS 秘密!
- jdbc之连接Oracle的基本步骤
- lnmp环境配置laravel项目白屏问题
- OpenShift 4 - 查看关键证书到期日期
- TensorFlow tf.keras.layers.RNN
- mysql dsec_MySQL基础(一)查询
- .与localhost与 .\sqlexpress的区别
- UVM中的factory机制
- Roshan.exe 运行直接崩溃
- vue3 - 23.h函数 / 函数式编程
- 扇贝python编程课 百度云,扇贝编程python课程分享
- webstorm 2018 激活破解方法亲测可用
热门文章
- 必读!选对机械行业ERP系统能使企业效率成倍提升
- PAT乙级——1027(有格式错误,暂未解决,求指点)
- Corel Painter 11的余温还没有过呢,Corel Painter 12就发布了,Corel 公司真是太有速度了。小猪我也是刚刚听朋友说Corel Painter 12发布一个月了。Core
- LoRa无线抄表物联网解决方案
- 百度广告联盟api probuf协议对接
- ROBOTSTUDIO中基础术语、在线功能
- chrome标签页静音_如何在Chrome和Firefox中自动使新标签页静音
- 学术会议系统 php,计算机设计
- 社区分享|货拉拉通过JumpServer纳管大规模云上资产
- 深度学习(Deep Ritz,Galerkin,PINN)求解偏微分方程(PDE)解读