- 博客(72)
- 资源 (2)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 EMV规范(一)——背景介绍
一、EMV组织介绍EMV标准是由国际三大银行卡组织--Europay(欧陆卡,已被万事达收购)、MasterCard(万事达卡)和Visa(维萨)共同发起制定的银行卡从磁条卡向智能IC卡转移的技术标准,是基于IC卡的金融支付标准,已成为公认的全球统一标准。1999年2月,当时的国际三大卡组织共同成立了EMVCo组织,用来管理、维护和完善EMV智能(芯片)卡的规格标准。EMVCo组织提供...
2016-02-20 13:48:55
5687
原创 EMV规范(九)——持卡人验证(CVM)三
上篇我说这篇要说说TLV格式,嗯嗯,怕是要食言了,我觉得还是要继续说说CVM才行。毕竟我刚刚又体会了一次,目前在过EFTPOS认证,然后规范里说得很清楚,请参考EMV Book 3的CVM部分。嗯嗯,由于我是半路接手的,连规范都没来得及看全,所以就没有仔细看别人写的CVM这部分代码,嗯嗯,差点搞掉半条命????...
2020-04-30 18:11:17
3860
1
原创 EMV规范(八)——持卡人验证(CVM)二
现在到了TVR和CVM Results部分了。TVR是Terminal Verification Results,也就是终端验证的结果,包括了脱机数据认证,持卡人认证,处理限制等等是否成功。所以只要交易结果不是我们期望的,我们总是先拿TVR出来看看是哪里出了问题。CVM Results是持卡人认证结果,针对CVM。一. TVRtag:‘95’ length:5 bytes第...
2019-12-19 18:35:52
2801
原创 Android学习笔记:Error running app: Default Activity Not Found
今天开始正式学习Android,没错搭好环境后我就碰到第一个问题:Error running app: Default Activity Not Found这个问题的原因是没有为程序配置主活动。解决办法是在AndroidManifest.xml文件中加入如下代码:intent-filter:是每一个Activity对应的过滤器标签节点。ACTION_MAIN:Android A...
2018-11-10 19:34:51
654
原创 EMV规范(七)——持卡人验证(CVM)一
此部分笔记是来源EMV Book3中的10.5 Cardholder Verification节,可以结合此篇笔记来阅读。终于到CVM这章了,持卡人验证是非常非常重要的章节,反正我的leader是这么跟我说的。然后花了很多时间看这节,最后因为我没怎么做EMV这块接触的kernel,所以很多种CVM还没接触过。不过,EMV规范是基础,国内的PBOC就不说了,说下非接的吧,Paypass,Payw...
2018-11-07 20:00:41
7217
6
原创 EMV规范(六)——处理限制
处理限制的目的是检查终端应用和卡片应用的兼容性。结果记录在TVR中。处理限制分为三部分:应用版本号检查,应用用途检查和应用有效期检查。一.应用版本号检查卡片返回的应用版本号的tag为“9F08”;终端的应用版本号的tag为“9F09”。若卡片未返回tag“9F08”,则终端应该假设卡片的应用版本号与终端的是兼容的,交易继续。若卡片的应用版本号和终端的应用版本号不一致,则应该置T
2017-06-17 17:25:41
2735
2
原创 EMV规范(五)——脱机数据认证
脱机数据认证的目的是用于脱机验证卡片真伪和卡片上关键数据没被篡改。一、执行条件由AFL确定需要参与脱机数据认证的记录数据(参考前一篇EMV规范(四)——读应用数据),由终端能力和卡片(AIP)决定脱机数据认证的方式:SDA(静态脱机数据认证)、DDA(动态脱机数据认证)、CDA(复合脱机数据认证)。优先级是 CDA>DDA>SDA(即当终端能力和卡片均匹配到多种脱机数据认证的方式下,...
2017-06-17 16:23:51
2604
原创 EMV规范(四)——读应用数据
读应用数据的目的是为了从卡片中获取后续交易需要的数据。例如,在脱机数据认证时,需要的认证数据,等。步骤:根据应用初始化时,由GPO命令返回的卡片数据中的AFL,来读取卡片数据。一. AFL:Application File Locator二. 所用到的命令为 Read Record终端发送的命令格式为: Record number:记录号 卡片回复的数据格式为:
2016-07-25 15:36:40
3374
2
原创 EMV规范(二)——应用选择
应用选择的目的是给正在执行的交易选择一个应用。步骤:首先建立应用候选列表,然后从候选列表中选择一个应用。一.建立候选列表建立终端与卡片之间共同支持的应用列表。两种方法:目录选择法和AID列表法1.目录选择法:a.终端发送选择’1PAY.SYS.FFD01’文件命令,ICC返回数据包含短文件标识符(tag’88’)b.根据短文件标识符终端循环发送读记录命令,直至ICC
2016-02-23 14:05:36
4853
原创 EMV规范(三)——应用初始化
一、应用初始化的目的:①通知卡片新交易开始②将交易所需的数据发送给卡片③从卡片上返回AIP和AFL④决定交易是否被允许执行二、应用初始化步骤:①设置TVR和TSI中所有位为0②根据应用选择时从卡片中获得PDOL,利用GPO命令将卡片所需的交易数据发送给卡片③根据卡片返回的数据可以得到AIP和AFL三、使用的命令GPO命令:四、例子
2016-02-21 11:30:44
2943
原创 AID列表
AID-应用标识符的组成规则AID:即唯一标识一个应用,分为两部分,RID(5字节)+PIX(最多11字节)RID:注册标识符,由ISO组织来分配,标识一个全球唯一的应用提供商,一般是分配给卡组织。PIX:扩展应用标识符,一般是由应用提供商自己定义。AID发卡行RID产品PIXAIDVisaA0 00 00 00 0
2016-02-19 11:08:02
4490
原创 世界六大银行卡组织
世界六大银行卡组织分别为:维萨(VISA)、万事达(MasterCard)、运通(America Express) 、日本JCB(Japan Credit Bureau) 、大莱(Dinners Club)、中国银联。 1.维萨(VISA)它是目前世界上最大的信用卡国际组织。VISA是一个开放的银行卡组织、由200多个国家的22000多家会员银行和其他金融机构参与的非股份、非营利的国际性组
2016-02-19 10:25:11
14459
原创 脚本POS规范 笔记
1.脚本ID:BCD码,共10位,5个字节脚本类型左起1位2-3位4-6位7-10位控制脚本100:银联卡标准应用某种控制脚本版本信息菜单脚本200:银联卡标准界面某种菜单版本信息
2015-10-30 17:10:09
2356
1
原创 JAVA 重写
/** * 目的:重写 */package com.sunp.mye;class Father{ public void Add() { System.out.println("A add..."); } public void Addall() { System.out.println("A add all.."); Add();//由于子类中重写了父类的Add,所
2015-10-29 15:51:08
609
原创 JAVA 中的重写与重载
/** * 目的: * 1.测试在继承的子类中是否可以重载父类方法的问题 * 2.子类是否继承了父类的私有成员,该在子类中怎么访问父类私有成员 * 3.是否可以重写父类的私有成员 * 结果: * 1.重载是同类中;重写是父类与子类中。所以只可以重写,不可以重载 * 2.子类继承了父类的所有成员,但是子类没有访问父类私有成员的权限。 * 3.无法重写。因为父类的私有成员不能被子类访问
2015-10-29 15:41:29
404
原创 JAVA中super 和 this的用途
1,super(1)在子类的构造函数中要调用基类的构造函数。当基类仅含有默认构造函数时,java会自动在导出类(子类)的构造器中插入对基类构造器的调用;构建顺序为,先初构建基类,再构造子类。但是,但基类含有有参数列表的构造器时,子类的构造器中必须要正确的调用基类的构造器,否则编译器将“抱怨”找不到符合基类的构造器。注意:super必须是在构造器的第一行代码。package com.su
2015-10-28 16:40:23
452
转载 Android activity类
activity类处于android.app包中,继承体系如下:1.java.lang.Object2.android.content.Context3.android.app.ApplicationContext4.android.app.Activityactivity是单独的,用于处理用户操作。几乎所有的activity都要和用户打交道,所以activ
2015-10-28 14:44:30
501
原创 解决Android SDK Manager无法更新
亲测有用:由于国内的各种屏蔽现在Android SDK Manager出现无法更新或更新太慢,如下方法可完美解决此问题打开..\Android\sdk\SDK Manager.exe按下图进行设置
2015-10-27 15:46:55
584
原创 NDK中的sample hello-jni 例子
现在开始编译运行hello-jni的例子了。http://jingyan.baidu.com/article/03b2f78c73b5a85ea237aeb0.html上面的链接是学习hello-jni很完整的。这个其中碰到的问题:1,运行之前先编译NDK,然后在编译JAVA代码。编译遇到Unable to launch cygpath. Is Cygwin on th
2015-10-27 15:44:33
1052
原创 初学NDK
首先找到了一个初学的demo:http://m.blog.csdn.net/blog/u010123588/12291611在这个学习的途中实在是碰到了太多的问题了。1,首先发现cmd中 javah 命令找不到,这个是由于当初配置java的环境变量不全导致的,所以,需要重新设置一遍java的环境变量,然后在cmd中输入javah -version,查看是否配置好了环境变量。这里
2015-10-27 15:34:53
398
原创 eclipse 笔记
1.设置字体大小:Windows -> Preferences -> General -> Appearance -> Colors and Fonts -> Basic ->Text Font 2.设置自动补全:http://jingyan.baidu.com/article/a3aad71aaed2e2b1fb0096a8.html
2015-10-27 15:10:53
338
原创 NDK搭建环境笔记
所需材料:eclipse、sdk :adt5x86(ADT:Android Development Tools, Eclipse的Android 开发插件,把Eclipse和SDK联系起来。)jdk:jdk-7u45-windows-i586ndk:android-ndk-r10e1.jdk安装与环境变量设置:http://jingyan.baidu.com/artic
2015-10-27 15:09:30
328
转载 ADT升级到23.0.2之后创建Android项目错误
问题: 今天把ADT升级到23.0.2之后,创建的Android工程上有个红色的惊叹号(当创建工程时mininum RequiredSDK >=4.0时没这个问题),而且Package Explorer里面还多了一个appcompat_v7包,这个包上面也有个红叉。通过README.txt可知其作用是使ActionBar可以向下兼容,使2.x可以使用4.x的界面风格。网
2015-10-21 16:21:35
398
原创 C++ new
有这样的也个类:class A{int a;public:A(int);~A();};1. A * a = new A();2. A * a = new A;3. A a;区别:1、2是指针,所以可以用new来为其分配空间,3不可以用new; 1、2都是调用默认构造函数,所以相同。但,如果为 A * a = new A(3);就不同了。
2015-04-02 10:59:52
335
转载 C++ 类中的this指针
1. this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。2
2015-04-02 10:49:57
717
原创 C++学习笔记(二) —— 标准库String类
1. string支持的几个构造函数:string s1;默认构造函数,s1为空串string s2(s1);将s2初始化为s1的一个副本string s3("value");将s3初始化为一个字符串字面值副本string s4(n,'c');将s4初始化为'c'的n个副本
2015-02-28 10:48:36
390
原创 C++学习笔记(一) —— 输入输出流
1.标准输入输出流:cin cout cerr(标准错误) clog(用于产生程序执行的一般信息)1.1 输出流 coutcout 可以连着使用endl 是一个特殊值,称为操纵符。将它写入输出流时,具有输出换行的效果,并刷新与设备相关联的缓冲区。通过缓冲区,用户可立即看到写入到流中的输出。/**************************************
2015-02-28 10:41:30
542
转载 如何修改eclipse中的默认工作路径
首先,关闭Eclipse并打开eclipse的安装目录,依次打开以下目录,configuration\.settings文件夹下有一个文件 org.eclipse.ui.ide.prefs, 用记事本打开,里面的内容格式如下:MAX_RECENT_WORKSPACES=5RECENT_WORKSPACES=D\:\\work of eclipseRECENT_WORKS
2015-02-25 14:05:29
611
原创 SVN 上传时出现灰色减号
刚刚上传一个文件,经理助理编译出现了错误,可是我这边确实十分漂亮的编译过了。亲爱的助理给了我截图,如下:一看就知道了有两个叫*heckPassWord.a和*ommsEncrypt.a的库文件没找到。可是我这里明明有这两个文件啊,可是却是一个灰色的减号。然后查了一下,发现是上传时,这两个文件被忽略了。解决办法:设置里修改忽略项,去掉*.a,然后再上传一次,就可以了。如下
2014-12-10 10:19:29
5392
原创 ADS “At least one file could not be added to the selected target(s)”
今天用ADS添加一个文件时,豁然出现了“At least one file could not be added to the selected target(s)”这个错误。顿时有些奇怪了。百度了一下,最终发现可能是文件被重复添加了,也就是原本就有这个文件。例如:
2014-12-10 10:15:27
3268
原创 Lua 学习笔记(七) —— 协同程序(二)
昨天学习了协同程序,今天继续看看协同函数。既然说到了协同程序和线程有些类似,那一定记得学习线程时的“生产者和消费者”的问题了。不知道线程?没关系。所谓“生产者和消费者”是指一个函数不断地产生值,另一个函数不断地接收值。比如,一个函数从一个文件中读值,另一个函数则接收值写入文件中,下面就是这个例子。那么send和receive函数是怎么交流的呢?记住,一个具有多个协同程序的程序在任意
2014-10-17 11:36:54
551
原创 Lua 学习笔记(七) —— 协同程序(一)
协同程序:拥有自己独立的栈、局部变量和指令指针,又与其他协同程序共享全局变量和其他大部分东西。与线程有些类似,区别是:一个具有多个协同程序的程序在任意时刻只能运行一个协同程序。1.协同程序的状态:挂起、运行、死亡、正常检查协同程序的状态:coroutine.status()2.流程:2.1 创建新的协同程序:coroutine.create():仅有一个
2014-10-16 17:59:11
586
原创 Lua 学习笔记(六) —— 迭代器和泛型for
今天开始died一、迭代器就是遍历集合的元素二、泛型for语句首先,for对in后面的表达式求值,表达式返回迭代器函数、恒定状态和控制变量的初值给for保存。然后,for会以恒定状态和控制变量来调用迭代器函数。最后,for执行循环体,直到迭代器函数的第一个返回值为nil。循环结束。
2014-10-16 11:34:49
490
原创 Lua 学习笔记(五) —— 语句
一、赋值多重赋值: 每个值或每个变量之间以逗号分隔例如:a, b = 10, 20Lua先对等号右边的所有元素求值,然后才执行赋值。二、局部变量和块local创建局部变量,作用域仅限于声明它们的程序块。三、控制结构1.if then else end 例如2. for数值型for for var = exp1,exp2,exp3 do e
2014-10-15 16:33:40
521
原创 Lua 学习笔记(四) —— 函数(二)
一、函数是匿名的函数是匿名的是指它没有名称。一个函数定义实际就是一条语句(更准确地说是一条赋值语句),这条语句创建了一种类型为“函数”的值,并将这个值赋予一个变量。例如,讨论print函数时,实际上是在讨论一个持有某函数的变量。在C语言中,我们的习惯是一个函数一定有函数名,而lua中,函数是可以没有函数名的,函数名相当于是函数的一个变量。例如:上面函数的本质是下面的函数。
2014-10-15 16:01:27
594
Lua For Windows
2014-10-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人