hce—运用nfc的卡模拟技术进行通信-android

本贴最后更新于 2944 天前,其中的信息可能已经事过景迁

2015年在研究近场支付的时候,apple pay还未出来,招商银行的nfc支付也没有出来,应该算得上吃鲜肉吧!!!哈哈!!!至于apple pay在之后的文章中发布出来。敬请期待(最近忙完了该忙完了,抽出了一点空闲的时间将之前的研究分享给大家。)。

当时遇到了非常多的问题,涉及到了与硬件的通信,需要用到十六进制数据,以及二进制的数据进行转换,转换成硬件可以理解的数据。当整个流程理清的时候,你会觉得非常的简单,因为一条直线走到底。但是之前研究的时候却是不知道如何通信,通信协议又是怎么样的,如何驱动nfc模块-===等等。。一头雾水,最后摸索成功。

容我上面发一下牢骚,下面开始内容部分。

 转载请附上本博客连接http://www.junwen1992.com//admin-index.do#article/article-list

在hce技术用到的是NFC近场通信,以下为NFC近场通信的技术原理。具体细节请参考:ISO 7816-4

手机贴近card Reader(小米平板+NFC读卡模块,这里我采用了android系统的小米平板,以及nfc读卡模块,nfc读卡模块是在淘宝选购的,然后提供开发包进行二次开发,这样,修改和封装一下发送的指令就可以连接平板了),发生了NFC之间的通信。其过程如下

关于手机部分的解释:手机接收到指令成功返回9000这里是需要android操作系统来管理的。android系统必须是4.4以上的操作系统。至于其原理,上android developer就可以看到。

我简单的说一下:app程序在需要向android系统注册一个id。然后手机遇到nfc读卡器发出的指令后,系统获得指令,得到读卡器发过来的id,然后去调用以这个id注册的应用程序。完成唤醒。

这就意味着,你只要屏幕亮着,那么就可以唤醒应用。

 转载请附上本博客连接http://www.junwen1992.com//admin-index.do#article/article-list

APDU指令集解释:

 如上表所示:

00A4040005F222222222分别对应的是:

CLA     : 00

INS      : A4 选择文件

P1       : 04

p2       : 00

Lc       : 05 发送数据的长度

Data   : F222222222 发送的数据

LE      : 无数据

下图为 INS指令的含义

1. 这是一条选择指令,选择了一个应用,这个应用之前向系统注册了一个相同的id,这样就可以找到这个应用了。相信之前研究过ic卡的同学就知道。要读一张卡首先也是需要发送一个选择指令吧。

2.然后手机就会返回了一个9000的成功状态码,如果返回其他的,应该是错误状态码吧,具体看ISO 7816-4文档吧。

3.选择了这个应用程序后就可以建立连接了,发送数据了。这个数据会是16进制的。

转载请附上本博客连接http://www.junwen1992.com//admin-index.do#article/article-list

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • wuym

    我目前用的是 android 官网的 HCEdemo,但是和读卡器通信时读卡器这边的状态码是找不到文件,请问 HCE 代码编写的时候还需要建立一个文件系统吗?

  • 其他回帖
  • zempty

    楼主好人。社区有你更美好~💞

推荐标签 标签

  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 355 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 1 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 623 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    174 引用 • 990 回帖 • 1 关注
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 600 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 608 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    5 引用 • 15 回帖 • 211 关注
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    181 引用 • 448 回帖
  • CodeMirror
    1 引用 • 2 回帖 • 120 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 54 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    165 引用 • 407 回帖 • 525 关注
  • OnlyOffice
    4 引用 • 17 关注
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 60 回帖 • 463 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 293 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    40 引用 • 24 回帖 • 2 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 691 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1347 回帖
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 21 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 2 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 163 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 467 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    318 引用 • 1670 回帖
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    51 引用 • 226 回帖 • 1 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    90 引用 • 383 回帖
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 513 关注
  • 博客

    记录并分享人生的经历。

    270 引用 • 2386 回帖