Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
METHOD FOR EARMARKING TWO ELECTRONIC PURSES
Document Type and Number:
WIPO Patent Application WO/2011/060662
Kind Code:
A1
Abstract:
A method for earmarking two electronic purses is provided. It relates to the information security field. The method includes: a CPU card enters the contactless type induction area of the terminal to be electrified and initialized, synchronizes the first electronic purse and the second electronic purse, receives the earmarking initialization command sent by the terminal, performs an earmarking initialization operation and returns a response message of the earmarking initialization command to the terminal; the terminal receives the response message of the earmarking initialization command and sends the data in the response message of the earmarking initialization command to the host computer; the host computer receives the data and saves it and sends the earmarking transaction acceptant message to the terminal; the terminal receives the earmarking transaction acceptant message and sends the earmarking command to the CPU card. The CPU card receives the earmarking command, performs an earmarking operation to the second electronic purse and refreshes the balance of the first electronic purse at the same time, and then returns the response message of the earmarking initialization command to the terminal.

Inventors:
LU ZHOU (CN)
YU HUAZHANG (CN)
Application Number:
PCT/CN2010/076701
Publication Date:
May 26, 2011
Filing Date:
September 07, 2010
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
FEITIAN TECHNOLOGIES CO LTD (CN)
LU ZHOU (CN)
YU HUAZHANG (CN)
International Classes:
G07F7/08; G06Q20/10; G06Q20/34; G06Q20/36
Domestic Patent References:
WO2008104704A12008-09-04
Foreign References:
CN101799954A2010-08-11
CN101799955A2010-08-11
CN1908995A2007-02-07
CN1949282A2007-04-18
CN1287338A2001-03-14
CN1904923A2007-01-31
CN101236673A2008-08-06
CN101364321A2009-02-11
CN1941008A2007-04-04
Attorney, Agent or Firm:
KANGXIN PARTNERS, P. C. (CN)
北京康信知识产权代理有限责任公司 (CN)
Download PDF:
Claims:
权 利 要 求 书

1. 一种对双电子 4 包进行圏存的方法, 其特征在于, 所述方法包括:

CPU卡进入终端的非接触式感应区, 所述终端与所述 CPU卡按照 ISO 14443接口协议建立连接;

所述 CPU卡上电并初始化,对第一电子钱包和第二电子钱包进行 同步, 并等待接收所述终端发送命令;

所述终端向所述 CPU卡发送圏存初始化命令;

所述 CPU卡接收所述圏存初始化命令, 执行圏存初始化操作, 并 返回所述圏存初始化命令的响应 4艮文给所述终端;

所述终端接收所述圏存初始化命令的响应报文, 并将所述圏存初 始化命令的响应报文中的数据发送给主机;

所述主机接收并保存所述数据, 向所述终端发送圏存交易接受 4艮 文;

所述终端接收所述圏存交易接受报文, 并向所述 CPU卡发送圏存 命令; 所述 CPU卡接收所述圏存命令,对所述第二电子钱包进行圏存操 作, 同时更新所述第一电子钱包的余额, 并返回所述圏存命令的响应 艮文给所述终端;

所述终端接收所述圏存命令的响应 4艮文, 圏存交易结束。

2. 如权利要求 1 所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述 CPU卡进入终端的非接触式感应区内之前, 所述方法还包括: 所述 CPU 卡的发卡系统对所述 CPU 卡中的逻辑加密卡部分和 CPU部分分别进行个人化, 设置个人化标志位;

将所述第一电子钱包在逻辑加密卡部分中所在的扇区的扇区访问 密钥写入所述 CPU卡中的 CPU部分中;

将所述 CPU卡中的个人化标志位设置为第一标识; 或者, 所述 CPU 卡的发卡系统对所述 CPU 卡中的逻辑加密卡部分和 CPU部分分别进行个人^^ 创建一个标识文件;

将所述第一电子钱包在逻辑加密卡部分中所在的扇区的扇区访问 密钥写入所述 CPU卡中的 CPU部分中。 如权利要求 1 所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述第一电子 4 包为基于逻辑加密芯片标准的金融应用, 预先约定存储 区在 CPU卡的逻辑加密卡部分中的扇区号和块号, 其中, 所述存储区 用于存储所述第一电子钱包的余额; 所述第二电子钱包为使用 ISO 14443接口协议实现的符合银行标准的电子钱包。 如权利要求 1 所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述 CPU卡对第一电子钱包和第二电子钱包进行同步之前, 所述方法还 包括:

所述 CPU卡判断个人化标志位是否为预先约定的标识,或者判断 内部是否存在标识文件;

若否, 则所述 CPU 卡不对第一电子 4 包和第二电子 4 包进行同 步, 直接等待接收所述终端发送命令;

若是, 则所述 CPU卡对第一电子钱包和第二电子钱包进行同步, 然后等待接收所述终端发送命令。 如权利要求 1 所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述 CPU卡对所述第一电子钱包和第二电子钱包进行同步的方法,具体 为:

所述 CPU卡获取所述第一电子 4 包的余额;

所述 CPU卡获取所述第二电子 4 包的余额;

所述 CPU 卡比较所述第一电子钱包和所述第二电子钱包的余额 的大小;

若所述第一电子钱包的余额小于所述第二电子钱包的余额, 则所 述 CPU 卡将所述第二电子钱包的余额设置为与所述第一电子钱包的 余额一致, 然后继续进行寻卡操作;

若所述第二电子钱包的余额小于所述第一电子钱包的余额, 则所 述 CPU 卡将所述第一电子钱包的余额设置为与所述第二电子钱包的 余额一致, 然后继续进行寻卡操作;

若所述第一电子钱包的余额与所述第二电子钱包的余额相等, 则 所述 CPU卡继续进行寻卡操作。

6. 如权利要求 5所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述将第二电子钱包的余额设置为与所述第一电子钱包的余额一致的方 法, 具体为: 查找应用文件的地址;

才艮据所述应用文件查找所述应用文件下的第二电子 4 包文件的地 址; 根据所述查找得到的第二电子钱包文件的地址和预先设定的第二 电子钱包的余额的偏移量计算用于存储所述第二电子钱包的余额的地 址;

将所述计算得到的用于存储所述第二电子钱包的余额的地址所指 向的存储区中的数据清空, 并将所述第一电子钱包的余额写入所述计 算得到的用于存储所述第二电子钱包的余额的地址所指向的存储区 中, 作为所述第二电子钱包的新的余额;

或者,

从预先约定的存储空间中读取用于存储所述第二电子钱包的余额 的地址; 将所述用于存储第二电子钱包的余额的地址所指向的存储区中的 数据清空, 并将第一电子钱包的余额写入所述用于存储第二电子钱包 的余额的地址所指向的存储区中,作为所述第二电子钱包的新的余额。

7. 如权利要求 5所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述将第二电子钱包的余额设置为与所述第一电子钱包的余额一致后, 还包括:

更新所述第二电子钱包的交易明细;

根据所述更新的第二电子钱包的交易明细的条数将所述第二电子 钱包的联机交易序号加上相应的值, 其中所述相应的值与所述条数相 同。

8. 如权利要求 5所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述将第一电子钱包的余额设置为与所述第二电子钱包的余额一致的方 法, 具体为:

才艮据存储所述第一电子 4 包的余额的存储区在 CPU 卡的逻辑加 密卡区域中的扇区号, 调用函数获取所述第一电子钱包的扇区密钥; 根据所述获取的扇区密钥和存储所述第一电子钱包的余额的存储 区在 CPU卡的逻辑加密卡区域中的块号,调用函数设置所述第一电子 钱包的余额。

9. 如权利要求 5所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述进行寻卡操作具体为:

判断是否接收到寻卡的命令, 若否, 则继续等待接收寻卡的命令, 若是, 则接收唤醒命令和请求命令;

返回应答命令, 进行防冲撞处理, 并接收终端发来的选择命令; 执行选择命令, 并发送确认信息给终端;

接收非接触式的数据帧。

10. 如权利要求 5所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述进行寻卡操作之后, 还包括:

判断是否有选择应答请求命令, 若是, 则等待接收应用命令; 若 否, 则执行第一电子钱包应用操作。

11. 如权利要求 10所述的对双电子钱包进行圏存的方法, 其特征在于, 当 接收到的所述应用命令是圏存初始化命令时, 所述方法还包括:

执行圏存初始化操作, 返回所述圏存初始化命令的响应报文给终 端;

接收所述终端发送的圏存命令, 对所述第二电子钱包进行圏存, 并更新所述的一电子 4 包的余额, 返回所述圏存命令的相应 4艮文给终 端, 圏存交易结束。

12. 如权利要求 1 所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述 CPU卡进行圏存初始化操作的步 4聚, 具体为:

所述 CPU卡读取并保存所述圏存初始化命令中的数据,其中所述 数据包括密钥索引号和交易金额; 所述 CPU卡检查自身是否支持所述密钥索引号; 若不支持, 则返回错误信息给终端, 终止执行圏存初始化操作; 若支持, 则生成一个伪随机数和一个过程密钥, 并用所述过程密 钥计算得到第一报文鉴别码。

13. 如权利要求 1 所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述 CPU卡接收所述圏存命令,对所述第二电子钱包进行圏存操作的步 骤, 具体为: 读取并保存所述圏存命令中的数据, 其中, 所述数据包含有第二 艮文鉴别码;

使用所述过程密钥 -险证所述第二 4艮文鉴别码是否有效; 若无效, 则返回所述第二 4艮文鉴别码无效的信息给终端, 终止进 行圏存操作;

若有效, 则将所述交易金额加到所述第二电子钱包的余额上。

14. 如权利要求 13所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述将交易金额加到所述第二电子钱包的余额上的方法, 具体为:

查找应用文件的地址;

才艮据所述应用文件查找所述应用文件下的第二电子 4 包文件的地 址; 根据所述查找得到的第二电子钱包文件的地址和预先设定的第二 电子钱包的余额偏移计算用于存储所述第二电子钱包的余额的地址; 读取所述计算得到的用于存储所述第二电子钱包的余额的地址所 指向的存储区中的数据,将所述交易金额与所述读取得到的数据相加, 并用所述相加得到的数据来覆盖所述计算得到的用于存储所述第二电 子钱包的余额的地址所指向的存储区中的数据, 并将所述相加得到的 数据作为所述第二电子钱包新的余额。

15. 如权利要求 1 所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述更新所述第一电子钱包的余额, 具体为将第一电子钱包的余额设置 为与所述第二电子钱包的余额相同, 包括:

才艮据所述存储所述第一电子 4 包的余额的存储区在 CPU 卡的逻 辑加密卡部分中的扇区号, 并调用函数获取所述第一电子钱包的扇区 密钥;

才艮据所述存储所述第一电子 4 包的余额的存储区在 CPU 卡的逻 辑加密卡部分中的块号, 以及所述扇区密钥, 调用函数设置所述第一 电子钱包的余额, 即用所述更新后的第二电子钱包的余额覆盖所述第 一电子 4 包的余额。

16. 如权利要求 1 所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述 CPU卡等待接收所述终端发送命令时, 若所述终端向所述 CPU卡 发送消费初始化命令, 则所述方法还包括:

所述 CPU卡接收所述消费初始化命令, 进行消费初始化操作, 并 返回所述消费初始化命令的响应报文给终端;

所述终端接收所述消费初始化命令的响应 4艮文, 并向所述 CPU卡 发送消费命令;

所述 CPU 卡接收所述消费命令, 使用所述第二电子钱包进行消 费, 并更新所述第一电子钱包的余额, 返回所述消费命令的响应报文 给所述终端;

所述终端接收所述消费命令的响应报文, 消费交易结束。

17. 如权利要求 16所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述 CPU卡进行消费初始化操作的步骤, 具体为:

所述 CPU卡读取并保存所述消费初始化命令中的数据, 其中, 所 述数据包括密钥索引号和交易金额;

所述 CPU卡检查自身是否支持所述密钥索引号;

若不支持, 则返回错误信息给终端, 终止执行消费初始化操作; 若支持, 则读取所述第二电子钱包的余额, 判断所述交易金额是 否大于所述第二电子钱包的余额;

若是, 则返回错误信息给终端, 终止执行消费初始化操作; 若否, 则生成一个伪随机数和一个过程密钥。

18. 如权利要求 16所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述 CPU卡接收所述消费命令,使用所述第二电子钱包进行消费的步骤, 具体为:

读取并保存所述消费命令中的数据, 其中, 所述数据包含第三报 文鉴别码;

使用所述过程密钥 -险证所述第三 4艮文鉴别码是否有效; 若无效, 则返回所述第三 4艮文鉴别码无效的信息给终端, 终止进 行消费操作;

若有效, 则从所述第二电子钱包的余额中扣减所述交易金额。

19. 如权利要求 18所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述从第二电子钱包的余额中扣减所述交易金额的方法, 具体为:

查找应用文件的地址;

才艮据所述应用文件查找所述应用文件下的第二电子 4 包文件的地 址; 根据所述查找得到的第二电子钱包文件的地址和预先设定的第二 电子钱包的余额偏移计算用于存储所述第二电子钱包的余额的地址; 读取所述计算得到的用于存储所述第二电子钱包的余额的地址所 指向的存储区中的数据, 将所述读取得到的数据减去所述交易金额, 并用相减得到的数据覆盖所述计算得到的用于存储所述第二电子钱包 的余额的地址所指向的存储区中的数据, 并将所述相减得到的数据作 为所述第二电子钱包新的余额。

20. 如权利要求 16所述的对双电子钱包进行圏存的方法, 其特征在于, 所 述更新所述第一电子钱包的余额, 具体为将所述第一电子钱包的余额 设置为与所述第二电子钱包的余额相同, 包括:

才艮据所述存储第一电子 4 包的余额的存储区在 CPU 卡的逻辑加 密卡部分中的扇区号, 并调用函数来获取所述第一电子钱包的扇区密 钥;

才艮据所述存储所述第一电子 4 包的余额的存储区在 CPU 卡的逻 辑加密卡部分中的块号, 以及所述扇区密钥, 调用函数来设置所述第 一电子钱包的余额, 即用所述更新后的第二电子钱包的余额覆盖所述 第一电子钱包的余额。

Description:
一种对双电子钱包进行圏存的方法 技术领域 本发明涉及信息安全领域,特别涉及一种对双 电子钱包进行圏存的方法。 背景技术 逻辑加密卡 Mifare 1 ( Ml )技术成熟、 价格低廉, 在传统的城市交通智 能卡应用中占据了绝大部分, 但 Ml卡内部没有独立的 CPU和操作系统, 完 全依靠内置硬件逻辑电路实现安全认证和保护 ,因此导致 Ml卡容易被破解, 按交通智能卡"一"" ^多用、 多卡互通"的发展趋势, Ml 卡内电子钱包的资金 存量必将越来越高, 因此 Ml的安全隐患已引起高度的关注。 CPU 卡内具有中央处理器 (CPU )、 随机存储器 (RAM )、 程序存储器

( ROM )、 数据存储器 (EEPROM ) 以及片内操作系统, 其安全性大幅优于 Ml卡, 但高昂的价格严重制约了其推广应用, 近来随着非接触 CPU卡的推 出, 其价格接近 Ml 卡, 技术也日趋成熟, 这使全面推广应用 CPU卡取代 Ml卡成为可能。 现在技术中存在一种包含 Ml和 CPU两部分的 CPU卡, 但是使用这种

CPU卡在 Ml终端进行充值时存在着较大的风险, 同时使用这种 CPU卡也 无法在现有的 Ml终端进行消费, 这样给用户造成了极大的不便, 并且这种 CPU卡在内部处理流程上两部分是完全独立的, 没有同步机制来对这两部分 进行同步。 发明内容 为了解决现有技术中的不足,本发明提供了一 种在 CPU终端对双电子 4 包进行圏存的方法, 所述方法包括:

CPU卡进入终端的非接触式感应区, 所述终端与所述 CPU卡按照 ISO 14443接口协议建立连接;

所述 CPU卡上电并初始化,对所述第一电子钱包和第 二电子钱包进行同 步, 并等待接收所述终端发送命令; 所述终端向所述 CPU卡发送圏存初始化命令; 所述 CPU卡接收所述圏存初始化命令, 进行圏存初始化操作, 并返回所 述圏存初始化命令的响应 4艮文给所述终端; 所述终端接收所述圏存初始化命令的响应 4艮文, 并将所述圏存初始化命 令的响应报文中的数据发送给主机; 所述主机接收并保存所述数据, 向所述终端发送圏存交易接受报文; 所述终端接收所述圏存交易接受报文, 并向所述 CPU卡发送圏存命令; 所述 CPU卡接收所述圏存命令, 对所述第二电子钱包进行圏存, 更新所 述第一电子 4 包的余额, 并返回所述圏存命令的响应 4艮文给所述终端; 所述终端接收所述圏存命令的响应 4艮文, 圏存交易结束。 本发明的有益效果在于:本发明提供的一种在 CPU终端对双电子 4 包进 行圏存的方法, 该方法中釆用了 CPU终端来进行圏存, 这样就提高了原有的 通过 Ml终端进行充值的安全性, 并且本发明提供的 CPU卡在不改变 Ml消 费终端的前提下,仍然可以在原有的 Ml终端使用该 CPU卡中的双电子 4 包 进行消费,这样给用户提供了极大的方便, 本发明还提供了对 CPU卡内的双 电子钱包进行同步的方法, 保证了 CPU卡内的双电子钱包的余额的一致。 附图说明 图 1为本实施例提供的一种双 CPU卡的 Ml和 CPU部分分别进行个人 4匕的方法¾¾程图; 图 2为本实施例提供的一种对 CPU卡内的 CPU电子 4 包和 Ml电子 4 包进行同步的方法流程图; 图 3为本实施例提供的一种在 CPU终端对 CPU卡内的 CPU电子钱包和 Ml电子钱包同时进行圏存的方法流程图; 图 4为本实施例提供的一种在 CPU终端使用 CPU卡内的 CPU电子钱包 和 M 1电子钱包进行消费的方法流程图; 图 5为本实施例提供的一种在 CPU卡内对双电子钱包进行操作的方法的 流程图。 具体实施方式 为使本发明的目的、 技术方案和优点更加清楚, 下面将结合附图对本发 明实施方式故进一步地详细描述。 本发明使用了一种双界面 CPU 卡, 该双界面 CPU 卡具体为带有 ISO 14443接口和 Mifare 1的非接触式 CPU卡, 如 SLE66CL80PEM、 P5CD012 等,并且通过该非接触式 CPU卡, 本发明实现了双电子 4 包应用, 具体地, 使用该非接触式 CPU 卡中的 ISO 14443 接口实现的是符合银行标准 (如 PBOC2.0标准) 的电子 4 包, 即 CPU电子 4 包, 而使用该非接触式 CPU卡 中的 Mifare 1实现的是基于逻辑加密芯片标准 (Mifare标准) 的金融应用, 即 Ml 电子 4 包,两种 4 包在硬件上相互独立, 但 CPU电子 4 包应用可以访 问 Ml 电子钱包。 在本发明中, 带有双电子钱包的 CPU卡为非接触式 CPU 卡, CPU终端为非接触式终端。 实施例 1 本实施例提供了一种对 CPU卡内的 Ml和 CPU部分分别进行个人化的 方法, 其中可以先对 CPU卡内的 M 1部分进行个人化, 再对 CPU部分进行 个人化, 也可以先对 CPU卡内的 CPU部分进行个人化, 再对 M 1部分进行 个人化, 本实施例以先对 Ml部分进行个人化, 再对 CPU部分进行个人化为 例来进行说明, 具体实现步 4聚如下: 步骤 101: 在初始密码 A和初始密码 B的控制下设置 Ml中各扇区的新 的密码 A和密码 B, 同时设置各扇区中各数据块的访问条件; 在本实施例中, Ml 中共有 16个扇区, 即需要在这 16个扇区中分别设 置新的密码 A和密码 B , 并且, 各个扇区分别有 4个块, 其中前 3个为数据 块, 最后一个为控制块, 每个块均为 16 字节, 数据块用于存储数据, 控制 块包含了所在扇区的密码 A和密码 B , 以及各数据块的访问条件, 其中密码 A和密码 B分别为 6个字节, 访问条件为 4个字节。 步骤 102: 在需要进行初始化的数据块所在的扇区的密码 A或密码 B的 控制下对该数据块写入初始值; 在本实施例步骤 102中, 预先约定 Ml电子钱包的余额存储在扇区 1块 0中, 则对扇区 1块 0进行初始化时, 则在扇区 1的密码 A或密码 B的控制 下 对块 0 写 入 Ml 电 子 4 包 的 初 始 值 , 即 对块 0 写 入 00000000FFFFFFFF0000000004FB04FB, 其中, 前 4个字节的 00000000为 写入的 Ml电子 4 包的初始值, 接下来的 4个字节的 FFFFFFFF为 Ml电子 4 包的初始值的反,再接下来的 4个字节 00000000为 Ml电子 4 包的初始值, 最后的 4个字节 04FB04FB为 Ml电子钱包的余额所在的数据块的块号、 块 号的反、 块号和块号的反。 在本实施例中, 步骤 101和步骤 102具体说明了对 Ml部分进行初始化 的过程, 下面具体描述对 CPU部分进行初始化的过程: 步骤 103: 从 CPU卡内获取传输密钥, 并在传输密钥的控制下创建文件 系统的主目录 MF; 步骤 104: 创建 MF下的密钥 (KEY ) 文件; 步 4聚 105 : 在传输密钥的控制下添加 MF下的主控密钥; 步骤 106:在 MF的主控密钥的控制下添加 MF下的维护密钥、全局 PIN、 全局 PIN的解锁密钥、 全局 PIN的重装密钥等其它密钥; 步骤 107: 创建应用目录文件 (DIR)、 PBOC应用文件 (ADF)以及 ADF下 的密钥 ( KEY ) 文件; 步骤 108: 在 MF的主控密钥的控制下添加 ADF的主控密钥; 步骤 109:在 ADF的主控密钥的控制下添加 ADF下维护密钥、应用 PIN、 应用 PIN的解锁密钥、 应用 PIN的重装密钥、 消费取现密钥、 圏存密钥、 圏 提密钥、 交易验证 ( TAC ) 密钥、 修改透支限额密钥、 外部认证密钥和内部 认证密钥等其它密钥; 步骤 110: 利用 Ml电子 4 包所在扇区的密码 A和密码 B来计算 Ml电 子 4 包所在扇区的 8字节的扇区访问密钥 MF_password; 在本实施例步 4聚 110中, 计算 Ml电子 4 包所在扇区的 8字节的扇区访 问密钥 MF_password的方法, 具体为: 对 Ml电子 4 包所在扇区的密钥 A和 密码 B进行哈希运算, 得到 16字节, 再将得到的 16字节作为 3DES算法的 密钥, 然后用 3DES算法对 8字节的初始值 0000000000000000进行力口密, 结 果即是 Ml电子钱包所在扇区的 8字节的扇区访问密钥; 具体地, Ml电子 4 包所在扇区的扇区 1的输入的密码 A和密码 B分别 为: A0A1A2A3A4A5和 B0B1B2B3B4B5 ,对密码 A和密码 B进行哈希运算, 得 i l的结果为: 40424446484A7E00 007E60626466686A, J>J的结果作为 3DES算法的密钥, 用 3DES算法对初始值 0000000000000000进行力口密, 得 到的结果为 : 8C7F46D76CE01266 , 即得到 的扇 区访问 密钥为 : 8C7F46D76CE01266。 步骤 111 : 在 ADF的主控密钥的控制下添加 Ml电子钱包所在扇区的扇 区访问密钥 MF_password; 在本实施例中, 还可以将 Ml 电子 4 包所在扇区的扇区访问密钥 MF_password写入 CPU卡内的 CPU部分存储区中的特定位置。 步骤 112: 创建 ADF下的公共应用基本文件 ( SFI = 0x15 ), 写入初始信 息; 步骤 113 : 创建 ADF下的持卡人基本文件 ( SFI = 0x16 ),写入初始信息; 步骤 114: 创建 ADF下的交易明细文件 ( SFI = 0x18 ); 步 4聚 115 : 创建 ADF下的自定义的交易工作文件, 写入初始值; 在本实施例步骤 115中,具体在自定义的交易工作文件中写入 CPU电子 钱包的余额的初始值 00000000。 步骤 116: 在 MF的属性区内设置一个个人化标志位, 再将该个人化标 志位设置为 ΟχΑΑ , 表示 CPU卡已进行了个人化操作。 在本实施例中, 还可以创建一个文件, 在该文件内设置一个个人化标志 位, 再将该个人化标志位设置为 OxAA, 表示 CPU卡已进行了个人化操作; 或者, 还可以将 CPU卡内的 CPU部分存储区中的特定位置作为个人化标志位 , 并将该个人化标志位设置为 OxAA, 表示 CPU卡已进行了个人化操作; 其中, OxAA是自定义的, 也可以将 0x01作为 CPU卡已进行了个人化 操作的标志, 即步 4聚 116还可以为: 夺个人^ ^标志位设置为 0x01 ; 或者, 在本实施例步骤 116还可以替换为: 在 MF下创建一个标识文件,

本发明实施例提供了一种对 CPU卡内的 Ml和 CPU部分分别进行个人 化的方法, 在本实施例中将 Ml电子钱包所在扇区的扇区访问密钥写入 CPU 部分中, 这样 CPU 电子 4 包应用可以访问 Ml 电子 4 包, 可以读耳又并 4爹改 Ml电子 4 包的余额。 实施例 2 本实施例提供了一种对 CPU卡内的 CPU电子钱包和 Ml电子钱包进行 同步的方法, CPU卡每次上电时, 都会对 CPU电子钱包和 Ml 电子钱包进行 同步处理,防止利用 Ml终端进行非法充值,例如当用户利用 Ml终端对 CPU 卡内的 Ml电子 4 包进行充值后, 则下次 CPU卡上电时会对 CPU电子 4 包 和 Ml电子钱包进行同步, 即比较 CPU电子钱包和 Ml电子钱包的余额的大 小, 以小余额来覆盖大余额, 这样 Ml电子钱包的余额被 CPU电子钱包的余 额覆盖了, 相当于 Ml电子钱包没有被非法充值, 或者, 当用户使用 CPU卡 在 Ml终端消费时, 当时只从 Ml 电子钱包的余额中扣减交易金额, 而不能 从 CPU电子钱包的余额中扣减相应的交易金额,只 有在下次 CPU卡上电时, 对 CPU电子钱包和 Ml电子钱包进行同步处理, 从而将 CPU电子钱包的余 额设置为与 Ml电子钱包的余额一致,相当于也从 CPU电子钱包的余额中扣 减了相应的交易金额, 具体实现步骤如下: 步骤 201 : CPU卡进入终端的非接触式感应区, 与终端按照 ISO 14443 接口协议建立连接; 步 4聚 202: CPU卡上电, 初始^^ 判断个人^ ^标志位是否为 OxAA, 若 是, 则执行步骤 203 , 若否, 则执行步骤 209; 在本实施例中, OxAA是 CPU卡与发卡系统预先约定的, 是自定义的, 即预先约定当个人化标志位是 OxAA时, 则表示 CPU卡已进行了个人化, 否 则表示 CPU卡未进行个人化, 并且 CPU卡和发卡系统也可以预先约定任意 其他字符作为标识, 如 0x01 , 即当个人化标志位是 0x01时, 则表示 CPU卡

或者,在本实施例中发卡系统与 CPU卡预先约定,若发卡系统已对 CPU 卡进行个人化时,则发卡系统在 CPU卡中的文件系统的主目录 MF下创建一 个标识文件, 当 CPU卡判断内部已存在标识文件时, 则表示 CPU卡已进行 了个人化, 当 CPU卡判断内部不存在标识文件时, 则表示 CPU卡未进行个 人化。 步骤 203: CPU卡获取 M 1的扇区密钥; 在本实施例中, 预先约定存储 Ml 电子 4 包的余额的扇区号和块号, 并 才艮据该预先约定的扇区号来获取 Ml的扇区密钥, 其中 CPU卡获取 Ml的扇 区 密 钥 的 方 法 具体 为 : 调 用 API 接 口 函 数 extern WORD GetMifareS ectorPassword ( BYTE *secPwdBuf, BYTE blockNo )来获取 Ml的 扇区密钥。 步骤 204: CPU卡获取 M 1电子钱包的余额; 在本实施例中, CPU卡才艮据步骤 103中获得的 Ml的扇区密钥, 以及预 先约定的存储 Ml 电子钱包的余额的块号来获取 Ml 电子钱包的余额, 其中 获取 Ml 电子 4 包的余额的方法具体为: 调用 API接口函数 extern BYTE GetMifarePurseBalance(BYTE *balanceBuf) 来获取 Ml电子 4 包的余额。 步骤 205: 获取 CPU电子钱包的余额; 在本实施例中, 获取 CPU电子钱包的余额的方法具体为: 查找应用文件 ADF的地址; 才艮据应用文件 ADF查找 ADF下的 CPU电子 4 包文件的地址; 才艮据查找得到的 CPU电子 4 包文件的地址和预先设定的 CPU电子 4 包 的余额偏移来计算用于存储 CPU电子钱包的余额的地址; 根据计算得到的用于存储 CPU电子钱包的余额的地址来读取 CPU电子 钱包的余额; 或者, 预先约定 CPU卡内有一块存储空间用于存储 CPU电子钱包的余额的地 址, 则从上述存储空间中读取上述地址, 再才艮据上述地址直接读取 CPU电子 钱包的余额。 步骤 206: 对 Ml电子钱包和 CPU电子钱包进行同步, 即比较 Ml电子 钱包的余额与 CPU电子钱包的余额的大小,若 Ml电子钱包的余额小于 CPU 电子钱包的余额, 则执行步骤 207, 若 CPU电子钱包的余额小于 Ml电子钱 包的余额, 则执行步骤 208, 若 Ml电子钱包的余额与 CPU电子钱包的余额 相等, 则执行步骤 209; 步骤 207: 将 CPU电子钱包的余额设置为与 Ml电子钱包的余额一致, 然后执行步 4聚 209; 在本实施例步骤 207中,将 CPU电子 4 包的余额设置为与 Ml电子 4 包 的余额一致的方法, 具体为: 查找应用文件 ADF的地址; 才艮据应用文件 ADF查找 ADF下的 CPU电子 4 包文件的地址; 才艮据查找得到的 CPU电子 4 包文件的地址和预先设定的 CPU电子 4 包 的余额偏移来计算用于存储 CPU电子钱包的余额的地址; 将上述地址所指向的存储区中的数据清空, 然后将 Ml 电子钱包的余额 写入上述地址所指向的存储区中, 作为 CPU电子 4 包的新的余额; 或者, 从预先约定的存储空间中读取 CPU电子钱包的余额的地址; 将上述地址所指向的存储区中的数据清空, 然后将 Ml 电子钱包的余额 写入上述地址所指向的存储区中, 作为 CPU电子 4 包的新的余额; 进一步地, 将 CPU电子钱包的余额设置为与 Ml电子钱包的余额一致, 还包括: 更新 CPU电子 4 包的交易明细, 具体方法为: 读取 CPU电子钱包的最后一条交易明细的具体时间; 将 Ml 电子 4 包的每条交易明细的时间与上述读取得到的时 间进行比 较; 将 Ml 电子钱包的交易明细的时间在上述读取得到的 时间之后的所有交 易明细追^?口到 CPU电子 4 包的交易明细中; 其中, 交易明细具体为: 交易金额、 交易类型标识、 终端机编号、 交易 日期和交易时间等; 进一步地, 更新 CPU电子钱包的交易明细之后, 还包括: 根据追加到 CPU电子钱包的交易明细中的 M 1电子钱包的交易明细的条 数, 相应地将 CPU电子钱包的脱机交易序号加上相应的值, 其中该相应的值 与上述条数相同,如追加到 CPU电子 4 包的交易明细中的 Ml电子 4 包的交 易明细的条数为 5 , 则相应地将 CPU电子钱包的脱机交易序号加 5。 步骤 208: 将 M 1电子钱包的余额设置为与 CPU电子钱包的余额一致, 然后执行步 4聚 209; 在本实施例步 4聚 208中, ^ 1 Ml电子 4 包的余额设置为与 CPU电子 4 包 的余额一致的方法具体为: 根据预先约定的扇 区号, 调用 API 接口 函数 extern WORD GetMifareS ectorPassword ( BYTE *secPwdBuf, BYTE blockNo )来获取 Ml的 扇区密钥; 调用 API 接口 函数 extern BYTE SetMifarePurseBalance ( BYTE *balanceBuf ), 并利用获得的 M 1的扇区密钥来设置 M 1电子钱包的余额, 即 将 Ml电子 4 包的余额设置为与 CPU电子 4 包的余额一致; 其中, 将 Ml电子钱包的余额设置为与 CPU电子钱包的余额一致, 还包 括: 更新 Ml电子 4 包的交易明细, 具体方法为: 读取 Ml电子钱包的交易明细的具体时间; 将 CPU 电子钱包的每条交易明细的时间与上述读取得 到的时间进行比 较; 将 CPU 电子钱包的交易明细的时间在上述读取得到的 时间之后的所有 交易明细追^?口到 Ml电子 4 包的交易明细中; 其中, 交易明细具体为: 交易金额、 交易类型标识、 终端机编号、 交易 日期和交易时间等; 进一步地, 更新 Ml电子钱包的交易明细之后, 还包括: 根据追加到 M 1电子钱包的交易明细中的 CPU电子钱包的交易明细的条 数, 相应地将 Ml 电子 4 包的脱机交易序号加上相应的值, 其中该相应的值 与上述条数相同,如追加到 Ml电子 4 包的交易明细中的 CPU电子 4 包的交 易明细的条数为 2, 则相应地将 Ml电子 4 包的脱机交易序号加 2。 步骤 209: 判断是否接收到寻卡的命令, 若否, 则继续等待接收命令并 进行判断, 若是, 则执行步骤 210; 步骤 210: 接收唤醒命令 WUPA和请求命令 REQA; 步骤 211 : 返回应答命令 ATQA, 再进行防冲撞处理 ANTICOL, 然后接 收选择命令 SELECT; 步骤 212: 发送选择确认 SAK给终端 ( MIFARE enabled ); 步骤 213: 接收到 接触式的数据帧 CL ( contactless ) Frame; 步骤 214: 判断是否有选择应答请求命令 RATS Ccommand, 若否, 则执 行步骤 215 , 若是, 则执行步骤 216; 步骤 215 : 执行 Ml钱包应用操作, 直到掉电或是 CPU卡离开终端的非 接触式感应区; 步骤 216: 等待接收应用命令。 本实施例提供了一种对 CPU卡内的 CPU电子钱包和 Ml电子钱包进行 同步的方法, CPU卡每次上电时, 需要比较 CPU电子 4 包和 Ml 电子 4 包的 余额的大小, 以余额小的来覆盖余额大的, 这样就解决了用户使用该 CPU卡 在 Ml终端非法圏存和 /或非法消费时而造成的 CPU电子钱包和 Ml 电子钱 包的余额的大小不一致的问题。 实施例 3 本实施例提供了一种在 CPU终端对 CPU卡内的 CPU电子 4 包和 Ml电 子钱包同时进行圏存的方法, CPU卡进入 CPU终端的非感应区,且 CPU终端 与主机建立连接后, CPU卡上电, 则 匕时会执行实施例 2 中所说的对 CPU 卡内的 CPU电子钱包和 Ml电子钱包进行同步的步骤,然后再根据用户 择 的应用进行不同的操作, 具体地, 本实施例中用户选择的是圏存应用, 则本 实施例提供了一种对 CPU卡内的 CPU电子钱包和 Ml电子钱包同时进行圏 存的方法, 具体实现步骤如下: 步骤 301 : 终端显示 4艮行的各种应用供用户选择; 其中, 用户根据自己的需要对终端上显示的银行应用 进行选择, 在本实 施例中, 用户具体选择的圏存应用。 步骤 302: CPU卡根据用户选择的圏存应用设置当前应用标 识, 并将该 应用标识对应的应用序列号返回给终端; 步骤 303 : 终端将 CPU卡发过来的应用序列号转发给主机; 步骤 304: 主机保存终端发送的上述 CPU卡对应的应用序列号; 步骤 305: 主机按照与终端预先约定的密钥标识, 使用相应的圏存主密 钥对上述应用序列号分散得到圏存子密钥; 步骤 306:终端向 CPU卡发送圏存初始化命令 INITIALIZE FOR LOAD; 在本实施例中, 圏存初始化命令 INITIALIZE FOR LOAD用于初始 4匕圏 存交易;

INITIALIZE FOR LOAD命令 4艮文分成: 命令头 + 命令体 即为: (CLA + INS + P 1 + P2) + (Lc + Data + Le); 其中, CLA + INS + P1 + P2为命令头, Lc + Data + Le为命令体, 命令 头为命令的编码, 命令头中的 CLA为指令类别, INS为指令代码, P1和 P2 为指令参数; 命令体中的 Lc为命令体内数据 Data的长度, Le是期望的应答 APDU数据字段的最大字节数; 并且 INITIALIZE FOR LOAD命令 4艮文数据 i或 Data中包含的数据具体为 密钥索引号、 交易金额和终端机编号。 步骤 307: CPU卡接收终端发送的 INITIALIZE FOR LOAD命令, 读取 并保存上述命令中的数据, 然后检查自身是否支持上述 INITIALIZE FOR LOAD命令中包含的密钥索引号, 若不支持, 则执行步骤 308, 若支持, 则 执行步骤 309; 步骤 308: 向终端返回状态码 0x9403 , 并终止执行命令; 步骤 309: 生成一个伪随机数和一个过程密钥, 并利用该过程密钥计算 得到第一 4艮文鉴别码 MAC 1; 在本实施例中, 过程密钥是由密钥 DLK分散得到的; 利用过程密钥计算得到第一报文鉴别码 MAC1的方法具体为: 将交易前的 CPU电子 4 包的余额、 交易金额、 交易类型标识和终端机编 号顺序链接, 再利用过程密钥对链接后的数据进行加密, 得到的加密后的数 据的前四个字节即为第一艮文鉴别码 MAC1。 步 4聚 310: CPU卡将 INITIALIZE FOR LOAD响应 4艮文返回给终端; 其中, INITIALIZE FOR LOAD响应 4艮文由 Data + swl + sw2组成; 只有当 INITIALIZE FOR LOAD命令执行成功时,则 CPU卡返回给终端 的 INITIALIZE FOR LOAD响应 4艮文中的状态码 swl和 sw2为' 9000,, 且 INITIALIZE FOR LOAD响应 4艮文数据域 Data中包含的数据为交易前的 CPU 电子钱包的余额、 CPU电子钱包的联机交易序号、 密钥版本号、 算法标识、 伪随机数和 MAC 1 ,若命令执行不成功,则 CPU卡返回给终端的 INITIALIZE FOR LOAD响应 4艮文中只含有状态码 swl和 sw2, 且状态码 swl和 sw2不 为' 9000,。 步骤 311 : 终端接收 CPU卡返回的 INITIALIZE FOR LOAD响应 4艮文, 并判断状态码是否为 '9000,, 若不是, 则终止交易, 若是, 则执行步骤 312; 步骤 312: 终端将 INITIALIZE FOR LOAD响应 4艮文中的所有响应数据 发送给主机; 步骤 313 : 主机接收并保存终端发送的所有响应数据, 按照 CPU卡在步 l 309中生成过程密钥相同的方法来生成一个相同 的过程密钥, 并用该过程 密钥来校验接收到的响应数据中的 MAC1 是否有效, 若无效, 则执行步骤 314, 若有效, 则执行步 4聚 315; 在本实施例步骤 313中,利用生成的过程密钥来校验接收到的 MAC1是 否正确的方法具体为: 将交易前的 CPU电子 4 包的余额、 交易金额、 交易类型标识和终端机编 号顺序链接, 然后利用生成的过程密钥对链接得到的数据进 行加密, 再比较 得到的加密后的数据的前四个字节与 MAC1 是否相同, 若不相同, 则校验 MAC1不正确, 若相同, 则校-险 MAC1正确。 步骤 314: 主机通知终端不接受圏存交易, 交易终止; 步骤 315: 主机从用户在银行相应的帐户中扣减交易金额 , 并利用步骤 213中生成的过程密钥计算得到第二报文鉴别码 MAC2; 在本实施例中, 利用步骤 313中生成的过程密钥计算得到第二报文鉴别 码 MAC2的方法具体为: 将交易金额、 交易类型标识、 终端机编号、 主机的交易日期和主机的交 易时间顺序链接, 再利用生成的过程密钥对链接得到的数据进行 加密, 得到 的加密后的数据的前四个字节即为第二报文鉴 别码 MAC2。 步骤 316: 主机将 CPU电子钱包的联机交易序号加 1 , 并向终端发送一 个圏存交易接受报文; 在本实施例步骤 316中, 圏存交易接受报文数据域中包含的数据具体为 MAC2、 主机的交易日期和主机的交易时间。 步骤 317: 终端接收主机发送的圏存交易接受报文, 读取并保存上述圏 存交易接受报文中的数据, 然后向 CPU 卡发送圏存命令 CREDIT FOR LOAD; 在本实施例中, 圏存命令 CREDIT FOR LOAD用于圏存交易;

CREDIT FOR LOAD命令 4艮文分成: 命令头 + 命令体 即为: (CLA + INS + P 1 + P2) + (Lc + Data + Le); 其中, CREDIT FOR LOAD命令报文数据域中的数据具体为主机的交 日期、 主机的交易时间和 M AC2。 步骤 318: CPU卡接收终端发送的 CREDIT FOR LOAD命令, 读取并保 存上述命令中的数据, 然后校验上述 CREDIT FOR LOAD命令数据域中的 MAC2是否有效, 若, 则执行步骤 319, 若正确, 则执行步骤 320; 在本实施例中, 校-险 MAC2是否正确的方法, 具体为: 将交易金额、 交易类型标识、 终端机编号、 交易日期和交易时间顺序链 接, 然后使用步骤 309中生成的过程密钥对链接得到的数据进行加 密, 再比 较力口密后得到的数据的前四个字节与 CREDIT FOR LOAD命令数据域中的 MAC2是否相同, 若不相同, 则 MAC2不正确, 若相同, 则 MAC2正确。 步骤 319: CPU卡向终端返回状态码 0x9302, 提示 MAC2无效, 终止 进行圏存操作; 步骤 320: CPU卡将 CPU电子钱包的联机交易序号加 1 , 将交易金额大 小力口到 CPU电子 4 包的余额上; 在本实施例步骤 320中,将交易金额加到 CPU电子钱包的余额上的方法, 具体为: 查找应用文件 ADF的地址; 才艮据应用文件 ADF查找 ADF下的 CPU电子 4 包文件的地址; 居查找得到的 CPU电子 4 包文件的地址和预先设定的 CPU电子 4 包 的余额的偏移来计算用于存储 CPU电子钱包的余额的地址; 读取上述地址所指向的存储区中的数据, 将交易金额与读取得到的数据 相加, 并用相加得到的数据来覆盖上述地址所指向的 存储区中的数据, 将此 相加得到的数据作为 CPU电子钱包新的余额; 将交易金额加到 CPU电子钱包的余额上之后还可以包括: 更新 CPU电 子钱包的交易明细; 其中, 需要更新的 CPU电子钱包的交易明细具体为: 交易金额、 交易类 型标识、 终端编号、 主机的交易日期和主机的交易时间, 具体地, CPU卡将 交易金额、 交易类型标识、 终端编号、 主机的交易日期和主机的交易时间顺 序链接组成一个记录以便更新。 步骤 321: CPU卡获得 Ml的扇区密钥; 在本实施例中, 预先约定存储 Ml 电子钱包的余额的扇区号和块号, 并 根据该预先约定的扇区号来获取 Ml的扇区密钥, 其中, CPU卡获得 Ml的 扇 区 密钥 的 方法具体为 : 调 用 API 接 口 函数 extern WORD GetMifareS ectorPassword ( BYTE *secPwdBuf, BYTE blockNo )来获得 Ml的 扇区密钥。 步骤 322: CPU卡将 Ml 电子钱包的联机交易序号加 1 , 设置 Ml 电子 钱包的余额,即用步骤 320中更新后的 CPU电子钱包的余额来覆盖 Ml电子 钱包的余额; 在本实施例中, CPU 卡设置 Ml 电子钱包的余额的方法具体为: 调用 API接口函数 extern BYTE SetMifarePurseBalance ( BYTE *balanceBuf ), 并 利用步骤 321 中获得的扇区密钥来设置 Ml 电子钱包的余额, 即用步骤 320 中更新后的 CPU电子钱包的余额来覆盖 Ml电子钱包的余额; 设置 Ml 电子 4 包的余额之后, 还可以包括: 更新 Ml 电子 4 包的交易 明细; 具体地,将步骤 320中更新的后 CPU电子钱包的交易明细追加到 Ml电 子钱包的交易明细中; 交易明细具体为: 交易金额、 交易类型标识、 终端机编号、 交易日期和 交易时间等 步骤 323: CPU卡用 DTK左右 8个字节进行异或运算, 再利用异或运 算得到的结果计算交易 -险证码 TAC码; 在本实施例步骤 323中 ,利用异或运算得到的结果计算 TAC码,具体为: 将交易后的 CPU电子钱包的余额或 Ml电子钱包的余额、加 1前的 CPU 卡的联机交易序号、 交易金额、 交易类型标识、 终端机编号、 主机的交易日 期和主机的交易时间顺序链接, 再利用异或运算得到的结果对链接得到的数 据进行加密, 得到的加密后的数据的前四个字节即为 TAC码。 步骤 324: CPU卡将 TAC码作为 CREDIT FOR LOAD命令的响应 4艮文 的数据域返回给终端; 步骤 325 : 终端接收 CREDIT FOR LOAD命令的响应 4艮文, 并保存 TAC 码, 交易结束。 在本实施例步骤 325中, 终端保存 TAC码后可以对 TAC码进行验证, 也可以不立即对 TAC码进行-险证。 本实施例提供了一种在 CPU终端对 CPU卡内的 CPU电子 4 包和 Ml电 子 4 包同时进行圏存的方法, 这样就避免了通过原有的通过 Ml终端进行圏 存时的不安全的问题, 并提高了圏存的安全性。 实施例 4 本实施例提供了一种在 CPU终端使用 CPU卡内的 CPU电子 4 包和 Ml 电子钱包进行消费的方法, 在本实施例中, CPU卡进入 CPU终端的非接触 感应区, CPU卡上电, 则此时会执行实施例 2中所说的对 CPU电子 4 包和 Ml电子钱包进行同步的步骤, 然后再根据用户选择的应用进行不同的操作, 具体地, 本实施例中用户选择的是消费应用, 则本实施例提供了一种使用 CPU卡内的 CPU电子钱包和 Ml电子钱包进行消费的方法, 在 CPU终端使 用 CPU电子钱包进行消费时, 从 CPU电子钱包的余额中扣减交易金额的同 时, 可以不从 Ml 电子 4 包的余额中扣减相应的金额, 然后通过下次上电时 的同步来从 Ml 电子 4 包的余额中扣减相应的金额, 相应地, 也可以直接从 Ml电子 4 包的余额中扣减相应的金额, 本实施例以从 CPU电子 4 包的余额 中扣减交易金额的同时, 也直接从 Ml 电子钱包的余额中扣减相应的金额为 例来进行说明, 具体实现步 4聚如下: 步骤 401 : 终端向 CPU 卡发送消费初始化命令 INITIALIZE FOR

PURCHASE; 在本实施例中,消费初始化命令 INITIALIZE FOR PURCHASE用于初始 化消费交易;

INITIALIZE FOR PURCHASE命令 4艮文分成: 命令头 + 命令体 即为: (CLA + INS + P 1 + P2) + (Lc + Data + Le); 其中, CLA + INS + P1 + P2为命令头, Lc + Data + Le为命令体, 命令 头为命令的编码, 命令头中的 CLA为指令类别, INS为指令代码, P1和 P2 为指令参数; 命令体中的 Lc为命令体内数据 Data的长度, Le是期望的应答 APDU数据字段的最大字节数; 并且 INITIALIZE FOR PURCHASE命令 4艮文数据 i或 Data中包含的数据 具体为密钥索引号、 交易金额和终端机编号。 步骤 402: CPU卡接收终端发送的 INITIALIZE FOR PURCHASE命令, 读取并保存上述指令中的数据, 然后检查自身是否支持上述 INITIALIZE FOR PURCHASE命令中包含的密钥索引号, 若不支持, 则执行步骤 403 , 若 支持, 则执行步骤 404; 步骤 403 : 向终端返回状态码 0x9403 , 并终止执行命令; 步骤 404 : 读取 CPU 电子 4 包的余额, 比较上述 INITIALIZE FOR PURCHASE命令中包含的交易金额的大小是否大于 CPU电子钱包的余额的 大小, 若是, 则执行步骤 405 , 若否, 则执行步骤 406; 在本实施例步骤 404中, 读取 CPU电子钱包的余额的方法具体为: 查找应用文件 ADF的地址; 才艮据应用文件 ADF查找 ADF下的 CPU电子 4 包文件的地址; 才艮据查找得到的 CPU电子 4 包文件的地址和预先设定的 CPU电子 4 包 的余额的偏移来计算用于存储 CPU电子钱包的余额的地址; 根据计算得到的用于存储 CPU电子钱包的余额的地址来读取 CPU电子 钱包的余额。 步骤 405 : 向终端返回状态码 0x9401 , 并终止执行命令; 步骤 406: CPU卡生成一个伪随机数和一个过程密钥; 在本实施例中,过程密钥用于 CPU电子钱包或 Ml电子钱包的消费交易, 过程密钥是用密钥 DPK分散得到的。 步骤 407: CPU卡发送 INITIALIZE FOR PURCHASE命令的响应 4艮文给 终端; 其中, INITIALIZE FOR PURCHASE响应 4艮文由 Data + swl + sw2组成; 只有当 INITIALIZE FOR PURCHASE命令执行成功时, 则 CPU卡返回 给终端的 INITIALIZE FOR PURCHASE响应 4艮文中的状态码 swl和 sw2为 '9000,, 且 INITIALIZE FOR PURCHASE响应 4艮文数据 i或 Data中包含的数 据具体为 CPU卡在步骤 406中生成的伪随机数和 CPU电子钱包的脱机交易 序号, 若命令执行不成功, 则 CPU 卡返回给终端的 INITIALIZE FOR PURCHAS响应 4艮文中只含有状态码 swl和 sw2, 且状态码 swl和 sw2不 为' 9000,。 步骤 408: 终端接收 CPU卡返回的 INITIALIZE FOR PURCHAS响应 4艮 文, 并判断状态码是否为 '9000,, 若不是, 则终止交易, 若是, 则执行步骤 409; 步骤 409: 终端利用 INITIALIZE FOR PURCHAS响应 4艮文数据域 Data 中的伪随机数和 CPU电子钱包的脱机交易序号, 并按照与 CPU卡生成过程 密钥相同的方法生成一个相同的过程密钥, 并计算得到第三 4艮文鉴别码 MAC3; 在本实施例中, 计算得到第三 4艮文鉴别码 MAC3的方法具体为: 将交易金额、 交易类型标识、 终端机编号、 终端的交易日期和终端的交 易时间顺序链接, 再用生成的过程密钥对链接得到的数据进行加 密, 得到的 加密后的数据的前四个字节即为第三报文鉴别 码 MAC3。 步骤 410: 终端向 CPU卡发送消费交易命令 DEBIT FOR PURCHASE WITHDRAW;

DEBIT FOR PURCHASE WITHDRAW命令 4艮文分成:命令头 + 命令体 即为: (CLA + INS + P1 + P2) + (Lc + Data + Le); 其中, DEBIT FOR PURCHASE WITHDRAW命令报文数据域 Data中的 数据具体为终端交易序号、 终端的交易日期、 终端的交易时间和 MAC3。 步骤 411 : CPU卡接收 DEBIT FOR PURCHASE WITHDRAW命令, 读 取并保存上述命令中的数据, 然后验证 DEBIT FOR PURCHASE WITHDRAW命令数据域 Data中的 MAC3是否有效, 若无效, 则执行步骤 412, 若有效, 则执行步 4聚 413; 在本实施例中, CPU卡验证 DEBIT FOR PURCHASE WITHDRAW命令 数据域 Data中的 MAC1是否有效的方法, 具体为:

CPU卡将交易金额、 交易类型标识、 终端机编号、 终端的交易日期和终 端的交易时间顺序链接, 并用步骤 406中生成的过程密钥对链接得到的数据 进行力 p密, 再比较得到的力。密后的数据的前四个字节与 DEBIT FOR PURCHASE WITHDRAW命令数据域 Data中的 MAC3是否相同,若不相同, 则 MAC3无效, 若 目同, 则 MAC3有效。 步骤 412: 向终端返回状态码 0x9302, 终止交易; 步骤 413 : CPU卡将 CPU 4 包的脱机交易序号加 1 , 并从 CPU电子 4 包的余额中扣减交易金额; 在本实施例步骤 413中,从 CPU电子钱包的余额中扣减交易金额的方法, 具体为: 查找应用文件 ADF的地址; 才艮据应用文件 ADF查找 ADF下的 CPU电子 4 包文件的地址; 才艮据查找得到的 CPU电子 4 包文件的地址和预先设定的 CPU电子 4 包 的余额的偏移来计算用于存储 CPU电子钱包的余额的地址; 读取上述地址所指向的存储区中的数据, 将读取得到的数据减去交易金 额, 并用相减得到的数据来覆盖上述地址所指向的 存储区中的数据, 将此相 减得到的数据作为 CPU电子 4 包新的余额; 从 CPU电子钱包的余额中扣减交易金额之后, 还包括: 更新 CPU电子 4 包的交易明细; 其中, 需要更新的 CPU电子钱包的相关交易明细具体为: 交易金额、 交 易类型标识、 终端编号、 终端的交易日期和终端的交易时间, 具体地, CPU 卡将交易金额、 交易类型标识、 终端编号、 终端的交易日期和终端的交易时 间顺序链接组成一个记录以便更新。 步骤 414: CPU卡获得 Ml的扇区密钥; 在本实施例中, 预先约定存储 Ml 电子钱包的余额的扇区号和块号, 并 才艮据该预先约定的扇区号来获取 Ml的扇区密钥, 其中 CPU卡获得 Ml的扇 区 密 钥 的 方 法 具体 为 : 调 用 API 接 口 函 数 extern WORD GetMifareS ectorPassword ( BYTE *secPwdBuf, BYTE blockNo )来获得 Ml的 扇区密钥。 步骤 415 : CPU卡将 Ml 电子钱包的脱机交易序号加 1 , 并设置 Ml 电 子钱包的余额,即用步骤 413中更新后的 CPU电子钱包的余额来覆盖 Ml电 子钱包的余额; 在本实施例中, CPU 卡设置 Ml 电子钱包的余额的方法具体为: 调用 API接口函数 extern BYTE SetMifarePurseBalance ( BYTE *balanceBuf ), 并 利用步骤 414中获得的扇区密钥来设置 Ml 电子钱包的余额, 即用步骤 413 中更新后的 CPU电子钱包的余额来覆盖 Ml电子钱包的余额; 设置 Ml 电子 4 包的余额之后, 还可以包括: 更新 Ml 电子 4 包的交易 明细; 具体地,将步骤 413中更新的 CPU电子钱包的交易明细追加到 Ml电子 钱包的交易明细中; 交易明细具体为: 交易金额、 交易类型标识、 终端机编号、 交易日期和 交易时间等。 步骤 416: CPU卡生成第四 4艮文鉴别码 MAC4; 在本实施例中, 生成第四 4艮文鉴别码 MAC4方法具体为: 用步骤 406中生成的过程密钥对交易金额进行加密, 得到的加密后的数 据的前四个字节即为第四 4艮文鉴别码 MAC4。 步骤 417: 用 DTK左右 8个字节进行异或运算, 并利用异或运算得到的 结果来计算交易 -险证码 TAC码; 在本实施例中, 利用异或运算得到的结果来计算 TAC码的方法具体为: 将交易金额、 交易类型标识、 终端机编号、 终端交易序号、 终端的交易 日期和终端的交易时间顺序链接, 并用异或运算得到的结果对链接得到的数 据进行加密, 得到的加密后的数据的前四个字节即为 TAC码。 步 4聚 418: CPU卡发送 DEBIT FOR PURCHASE WITHDRAW命令的响 应 4艮文给终端; 其中, INITIALIZE FOR PURCHASE响应 4艮文由 Data + swl + sw2组成;

INITIALIZE FOR PURCHASE响应 4艮文的数据 i或 Data中包含有 MAC2 和 TAC码。 步 4聚 419:终端接收 CPU卡发送的 DEBIT FOR PURCHASE WITHDRAW 命令的响应 4艮文,并判断 INITIALIZE FOR PURCHASE响应 4艮文数据 i或 Data 中包含的 MAC4是否有效, 若无效, 则执行步骤 420, 若有效, 则执行步骤 421 ; 步骤 420: 终端进入自定义的错误处理流程; 步 4聚 421 : 交易正常结束。 本实施例提供的是在 CPU终端进行消费的实施例, 在 CPU终端进行消 费时, CPU卡不仅从 CPU电子钱包的余额中扣减相应的交易金额, 并且同 时从 Ml电子钱包的余额中也扣减相应的交易金额, CPU电子钱包的余额 设置为与 Ml电子 4 包的余额一致, 这样就保证了消费的一致性。 实施例 5 本实施例提供了一种在 CPU终端对 CPU卡内的 CPU电子 4 包和 Ml电 子钱包进行操作的方法,在本实施例中, 带有 CPU电子钱包和 Ml 电子钱包 的 CPU卡为非接触式 CPU卡, CPU终端为非接触式终端, 具体实现步骤如 下: 步骤 501 : CPU卡进入终端的非接触式感应区内, CPU卡上电并初始化; 步骤 502: 判断自身是否已进行了个人化, 即判断内部的个人化标志位 是否为 OxAA, 若是, 则执行步骤 503 , 若否, 则执行步骤 509; 在本实施例中, 个人化标志位是发卡系统与 CPU卡预先约定的, 当发卡 系统已对 CPU卡进行个人化时, 则发卡系统在 CPU卡中设置一个个人化标 志位, 并将该个人化标志位设置为预先约定的值, 在本实施例中发卡系统与

CPU卡预先约定的值具体为 OxAA,是自定义的, 即当个人化标志位是 OxAA 时, 则表示 CPU卡已进行了个人化, 否则表示 CPU卡未进行个人化, 并且 发卡系统和 CPU卡也可以预先约定任意其他的值作为标识, 如 0x01 , 即当 个人化标志位是 0x01时, 则表示 CPU卡已进行了个人化, 否则表示 CPU卡 未进行个人化; 或者,在本实施例中发卡系统与 CPU卡预先约定,若发卡系统已对 CPU 卡进行个人化时, 则发卡系统在 CPU卡中创建一个文件系统的主目录 MF, 当 CPU卡判断内部已存在文件系统的主目录 MF时, 则表示 CPU卡已进行 了个人化, 当 CPU卡判断内部不存在文件系统的主目录 MF时,则表示 CPU 卡未进行个人化; 或者, 发卡系统与 CPU卡预先约定, 若发卡系统已对 CPU卡进行个人 化时,则发卡系统在 CPU卡中的文件系统的主目录 MF下创建一个标识文件, 当 CPU卡判断内部已存在标识文件时, 则表示 CPU卡已进行了个人化, 当 CPU卡判断内部不存在标识文件时, 则表示 CPU卡未进行个人化。 步骤 503: 获取 Ml的扇区密钥; 在本实施例中, 预先约定存储 Ml 电子钱包的余额的扇区号和块号, 并 居该预先约定的扇区号来获取 Ml的扇区密钥, 其中获取 Ml的扇区密钥 的方法具体为: 调用 API接口函数 extern WORD GetMifareSectorPassword ( BYTE *secPwdBuf, BYTE blockNo ) 来获取 Ml的扇区密钥。 步骤 504: 获取 M 1电子钱包的余额; 在本实施例中, CPU卡才艮据步骤 503中获得的 Ml的扇区密钥, 以及预 先约定的存储 Ml 电子钱包的余额的块号来获取 Ml 电子钱包的余额, 其中 获取 Ml 电子 4 包的余额的方法具体为: 调用 API接口函数 extern BYTE GetMifarePurseBalance(BYTE *balanceBuf) 来获取 Ml电子 4 包的余额。 步骤 505: 获取 CPU电子钱包的余额; 在本实施例中, 获取 CPU电子钱包的余额的方法具体为: 查找应用文件 ADF的地址; 才艮据应用文件 ADF查找 ADF下的 CPU电子 4 包文件的地址; 才艮据查找得到的 CPU电子 4 包文件的地址和预先设定的 CPU电子 4 包 的余额的偏移量来计算用于存储 CPU电子钱包的余额的地址; 根据计算得到的用于存储 CPU电子钱包的余额的地址来读取 CPU电子 钱包的余额; 或者, 预先约定 CPU卡内有一块存储空间用于存储 CPU电子钱包的余额的地 址, 则从上述存储空间中读取上述地址, 再才艮据上述地址直接读取 CPU电子 4 包的余额。 步骤 506: 对 Ml电子钱包和 CPU电子钱包进行同步, 即比较 Ml电子 钱包的余额与 CPU电子钱包的余额的大小,若 Ml电子钱包的余额小于 CPU 电子钱包的余额, 则执行步骤 507, 若 CPU电子钱包的余额小于 Ml电子钱 包的余额, 则执行步骤 508, 若 Ml电子钱包的余额与 CPU电子钱包的余额 相等, 则执行步 4聚 509; 步骤 507: 将 CPU电子钱包的余额设置为与 M 1电子钱包的余额一致, 然后执行步 4聚 509; 在本实施例步骤 507中,将 CPU电子 4 包的余额设置为与 Ml电子 4 包 的余额一致的方法, 具体为: 查找应用文件 ADF的地址; 才艮据应用文件 ADF查找 ADF下的 CPU电子 4 包文件的地址; 才艮据查找得到的 CPU电子 4 包文件的地址和预先设定的 CPU电子 4 包 的余额的偏移量来计算用于存储 CPU电子钱包的余额的地址; 将上述地址所指向的存储区中的数据清空, 然后将 Ml 电子钱包的余额 写入上述地址所指向的存储区中, 作为 CPU电子钱包的新的余额; 或者, 从预先约定的存储空间中读取 CPU电子钱包的余额的地址; 将上述地址所指向的存储区中的数据清空, 然后将 Ml 电子钱包的余额 写入上述地址所指向的存储区中, 作为 CPU电子 4 包的新的余额; 进一步地, 将 CPU电子钱包的余额设置为与 Ml电子钱包的余额一致, 还包括: 更新 CPU电子 4 包的交易明细, 具体方法为: 读取 CPU电子钱包的最后一条交易明细的具体时间; 将 Ml 电子 4 包的每条交易明细的时间与上述读取得到的时 间进行比 较; 将 Ml 电子钱包的交易明细的时间在上述读取得到的 时间之后的所有交 易明细追力口到 CPU电子 4 包的交易明细中; 其中, 交易明细具体为: 交易金额、 交易类型标识、 终端机编号、 交易 日期和交易时间等; 进一步地, 更新 CPU电子钱包的交易明细之后, 还包括: 根据追加到 CPU电子钱包的交易明细中的 M 1电子钱包的交易明细的条 数, 相应地将 CPU电子 4 包的脱机交易序号加上相应的值, 其中该相应的值 与上述条数相同,如追加到 CPU电子 4 包的交易明细中的 Ml电子 4 包的交 易明细的条数为 3 , 则相应地将 CPU电子钱包的脱机交易序号加 3。 步骤 508: 将 M 1电子钱包的余额设置为与 CPU电子钱包的余额一致, 然后执行步 4聚 509; 在本实施例步骤 508中,将 M 1电子钱包的余额设置为与 CPU电子钱包 的余额一致的方法具体为: 根据预先约定的扇 区号, 调用 API 接口 函数 extern WORD GetMifareS ectorPassword ( BYTE *secPwdBuf, BYTE blockNo )来获取 Ml的 扇区密钥; 调用 API 接口 函数 extern BYTE SetMifarePurseBalance ( BYTE

*balanceBuf), 并利用获得的 Ml的扇区密钥来设置 Ml电子钱包的余额, 即 将 Ml电子 4 包的余额设置为与 CPU电子 4 包的余额一致; 其中, 将 Ml电子钱包的余额设置为与 CPU电子钱包的余额一致, 还包 括: 更新 Ml电子 4 包的交易明细, 具体方法为: 读取 M 1电子钱包的最后一条交易明细的具体时间; 将 CPU 电子钱包的每条交易明细的时间与上述读取得 到的时间进行比 较; 将 CPU 电子钱包的交易明细的时间在上述读取得到的 时间之后的所有 交易明细追^?口到 Ml电子 4 包的交易明细中; 其中, 交易明细具体为: 交易金额、 交易类型标识、 终端机编号、 交易 日期和交易时间等; 进一步地, 更新 Ml电子钱包的交易明细之后, 还包括: 根据追加到 M 1电子钱包的交易明细中的 CPU电子钱包的交易明细的条 数, 相应地将 Ml 电子 4 包的脱机交易序号加上相应的值, 其中该相应的值 与上述条数相同,如追加到 Ml电子 4 包的交易明细中的 CPU电子 4 包的交 易明细的条数为 1 , 则相应地将 Ml电子 4 包的脱机交易序号加 1。 步骤 509: 判断是否接收到寻卡的命令, 若否, 则继续等待接收命令并 进行判断, 若是, 则执行步骤 510; 步骤 510: 接收唤醒命令 WUPA和请求命令 REQA; 步骤 511 : 返回应答命令 ATQA, 再进行防冲撞处理 ANTICOL, 然后接 收选择命令 SELECT; 步 4聚 512: 发送选择确认 SAK ( MIFARE enabled ); 步骤 513: 接收到 接触式的数据帧 CL ( contactless ) Frame; 步骤 514: 判断是否有选择应答请求命令 RATS Ccommand, 若否, 则执 行步骤 515 , 若是, 则执行步骤 516; 步骤 515 : 执行 Ml钱包应用操作, 直到掉电或是 CPU卡离开终端的非 接触式感应区; 步骤 516 : 等待接收应用命令, 当接收到的是圏存初始化命令 INITIALIZE FOR LOAD时, 则执行步骤 517, 当接收到的是消费初始化命 令 INITIALIZE FOR PURCHASE时, 则执行步 4聚 532; 在本实施例中, 圏存初始化命令 INITIALIZE FOR LOAD用于初始 4匕圏 存交易。 步骤 517: 读取 INITIALIZE FOR LOAD命令中包含的数据并保存; 在本实施例中, INITIALIZE FOR LOAD命令中包含的数据具体为密钥 索引号、 交易金额和终端机编号。 步骤 518: 检查自身是否支持 INITIALIZE FOR LOAD命令中包含的密 钥索引号, 若不支持, 则执行步骤 519, 若支持, 则执行步骤 520; 步骤 519: 返回状态码 0x9403给终端, 并终止执行圏存初始化操作, 然 后返回到步 4聚 516; 步骤 520: 生成一个伪随机数和一个过程密钥, 并利用该过程密钥计算 得到第一 4艮文鉴别码 MAC 1; 在本实施例中, 过程密钥是由密钥 DLK分散得到的; 利用过程密钥计算得到第一报文鉴别码 MAC1的方法具体为: 将交易前的 CPU电子 4 包的余额、 交易金额、 交易类型标识和终端机编 号顺序链接, 再利用过程密钥对链接后的数据进行加密, 得到的加密后的数 据的前四个字节即为 MAC1。 步 4聚 521 : 将 INITIALIZE FOR LOAD响应 4艮文返回给终端; 其中, INITIALIZE FOR LOAD响应 4艮文由 Data + swl + sw2组成; 只有当 INITIALIZE FOR LOAD 响应 4艮文中的状态码 swl 和 sw2 为 '9000,时,则 INITIALIZE FOR LOAD命令执行成功, INITIALIZE FOR LOAD 响应报文数据域 Data中包含的数据有交易前的 CPU电子钱包的余额、 CPU 钱包的联机交易序号、 密钥版本号、 算法标识、 伪随机数和 MAC1 , 若命令 执行不成功, 则返回给终端的 INITIALIZE FOR LOAD响应 4艮文中只含有状 态码 swl和 sw2, 且状态码 swl和 sw2不为' 9000'。 步骤 522:接收终端发送的圏存命令 CREDIT FOR LOAD,读取 CREDIT FOR LOAD命令中的数据并保存; 在本实施例中, 圏存命令 CREDIT FOR LOAD用于圏存交易; 其中, CREDIT FOR LOAD命令中的数据具体为交易日期、 交易时间和 第二报文鉴别码 MAC2。 步骤 523:使用步骤 520中生成的过程密钥来验证上述 MAC2是否有效, 若无效, 则执行步骤 524, 若有效, 则执行步骤 525; 在本实施例中, -险证 MAC2是否有效的方法, 具体为: 将交易金额、 交易类型标识、 终端机编号、 交易日期和交易时间顺序链 接, 然后使用步骤 520中生成的过程密钥对链接得到的数据进行加 密, 再比 较力口密后得到的数据的前四个字节与 CREDIT FOR LOAD命令数据域中的 MAC2是否相同, 若不相同, 则 MAC2无效, 若相同, 则 MAC2有效。 步骤 524: 返回状态码 0x9302给终端, 提示 MAC2无效, 终止执行圏 存操作, 然后返回到步 4聚 516; 步骤 525 : 将 CPU电子钱包的联机交易序号加 1 , 将交易金额加到 CPU 电子钱包的余额上; 在本实施例步骤 525中,将交易金额加到 CPU电子钱包的余额上的方法, 具体为: 查找应用文件 ADF的地址; 才艮据应用文件 ADF查找 ADF下的 CPU电子 4 包文件的地址; 才艮据查找得到的 CPU电子 4 包文件的地址和预先设定的 CPU电子 4 包 的余额的偏移量来计算用于存储 CPU电子钱包的余额的地址; 读取上述计算得到的用于存储 CPU 电子 4 包的余额的地址所指向的存 储区中的数据, 将交易金额与读取得到的数据相加, 并用相加得到的数据覆 盖上述计算得到的用于存储 CPU 电子钱包的余额的地址所指向的存储区中 的数据, 将此相加得到的数据作为 CPU电子钱包新的余额。 步骤 526: 更新 CPU电子钱包的交易明细; 在本实施例中,需要更新的 CPU电子钱包的交易明细具体为:交易金额、 交易类型标识、 终端编号、 交易日期和交易时间, 具体地, CPU卡将交易金 额、 交易类型标识、 终端编号、 交易日期和交易时间顺序链接组成一个记录 以便更新。 步骤 527: 获得 Ml的扇区密钥; 在本实施例中, 预先约定存储 Ml 电子钱包的余额的扇区号和块号, 并 根据该预先约定的扇区号来获取 Ml的扇区密钥, 其中获得 Ml的扇区密钥 的方法具体为: 调用 API接口函数 extern WORD GetMifareSectorPassword ( BYTE *secPwdBuf, BYTE blockNo ) 来获得 Ml的扇区密钥; 步骤 528: 将 Ml电子钱包的联机交易序号加 1 , 并更新 Ml电子钱包的 余额,即用步骤 525中更新后的 CPU电子钱包的余额覆盖 Ml电子钱包的余 额; 在本实施例中, 更新 Ml电子 4 包的余额的方法具体为: 调用 API接口 函数 extern BYTE SetMifarePurseBalance ( BYTE *balanceBuf ), 并利用获得 的扇区密钥设置 Ml电子钱包的余额,即用步骤 525中更新后的 CPU电子钱 包的余额覆盖 Ml电子钱包的余额; 步 4聚 529: 更新 Ml电子 4 包的交易明细; 具体地,将步骤 526中更新的后 CPU电子钱包的交易明细追加到 Ml电 子 4 包的交易明细中; 交易明细具体为: 交易金额、 交易类型标识、 终端机编号、 交易日期和 交易时间等。 步骤 530: 用 DTK左右 8个字节进行异或运算, 再利用异或运算得到的 结果计算交易险证码 TAC码; 在本实施例步骤 530中,利用异或运算得到的结果计算 TAC码,具体为: 将交易后的 CPU电子钱包的余额或 Ml电子钱包的余额、加 1前的 CPU 卡的联机交易序号、 交易金额、 交易类型标识、 终端机编号、 交易日期和交 易时间顺序链接, 再利用异或运算得到的结果对链接得到的数据 进行加密, 得到的加密后的数据的前四个字节即为 TAC码。 步骤 531 :返回 CREDIT FOR LOAD命令的响应 4艮文给终端, 交易结束, 然后返回到步骤 516,其中 CREDIT FOR LOAD命令的响应 4艮文包含有 TAC 码; 步骤 532: 读取消费初始化命令 INITIALIZE FOR PURCHASE中的数据 并保存; 在本实施例中,消费初始化命令 INITIALIZE FOR PURCHASE用于初始 化消费交易; 并且 INITIALIZE FOR PURCHASE命令中的数据具体为密钥索引号、交 易金额和终端机编号。 步骤 533 : 检查自身是否支持上述 INITIALIZE FOR PURCHASE命令中 包含的密钥索引号, 若不支持, 则执行步骤 534, 若支持, 则执行步骤 535; 步骤 534: 返回状态码 0x9403给终端, 并终止执行消费初始化操作, 然 后返回到步 4聚 516; 步骤 535 : 读取 CPU 电子 4 包的余额, 判断上述 INITIALIZE FOR PURCHASE命令中包含的交易金额的大小是否大于 CPU电子钱包的余额的 大小, 若是, 则执行步骤 536, 若否, 则执行步骤 537; 在本实施例步骤 535中, 读取 CPU电子钱包的余额的方法具体为: 查找应用文件 ADF的地址; 应用文件 ADF才艮据查找 ADF下的 CPU电子 4 包文件的地址; 才艮据查找得到的 CPU电子 4 包文件的地址和预先设定的 CPU电子 4 包 的余额的偏移量来计算用于存储 CPU电子钱包的余额的地址; 根据计算得到的用于存储 CPU电子钱包的余额的地址来读取 CPU电子 4 包的余额。 步骤 536: 返回状态码 0x9401给终端, 并终止执行消费初始化操作, 然 后返回到步 4聚 516; 步骤 537: 生成一个伪随机数和一个过程密钥; 在本实施例中,过程密钥用于 CPU电子钱包或 M 1电子钱包的消费交易, 过程密钥是用密钥 DPK分散得到的。 步骤 538: 发送 INITIALIZE FOR PURCHASE命令的响应 4艮文给终端; 其中, INITIALIZE FOR PURCHASE响应 4艮文由 Data + swl + sw2组成; 只有当 INITIALIZE FOR PURCHASE命令执行成功时, 则 CPU卡返回 给终端的 INITIALIZE FOR PURCHASE响应 4艮文中的状态码 swl和 sw2为 '9000,, 且 INITIALIZE FOR PURCHASE响应 4艮文数据 i或 Data中包含的数 据具体为伪随机数和 CPU电子钱包的脱机交易序号, 若命令执行不成功, 则 CPU卡返回给终端的 INITIALIZE FOR PURCHAS响应 4艮文中只含有状态码 swl和 sw2, 且状态码 swl和 sw2不为' 9000,。 步骤 539: 接收终端发送的消费命令 DEBIT FOR PURCHASE WITHDRAW, 读取并保存 DEBIT FOR PURCHASE WITHDRAW命令中的 数据; 其中, DEBIT FOR PURCHASE WITHDRAW命令中的数据具体为: 终 端交易序号、 终端的交易日期、 终端的交易时间和第三鉴别码 MAC3。 步骤 540: 使用步骤 537 中生成的过程密钥来 证 DEBIT FOR PURCHASE WITHDRAW命令中包含的 MAC3是否有效, 若无效, 则执行 步骤 541 , 若有效, 则执行步 4聚 542; 在本实施例中 , 脸证 DEBIT FOR PURCHASE WITHDRAW命令中包含 的 MAC3是否有效的方法, 具体为: 将交易金额、 交易类型标识、 终端机编号、 终端的交易日期和终端的交 易时间顺序链接,用步骤 537中生成的过程密钥对链接得到的数据进行加 密, 再比较得到的力 p密后的数据的前四个字节与 DEBIT FOR PURCHASE WITHDRAW命令中包含的 MAC3是否相同, 若不相同, 则 MAC3无效, 若 目同, 则 MAC3有效。 步骤 541 : 返回状态码 0x9302给终端, 终止交易, 然后返回到步骤 516; 步骤 542: 将 CPU电子钱包的脱机交易序号加 1 , 并从 CPU电子钱包的 余额中扣减交易金额; 在本实施例步骤 542中,从 CPU电子钱包的余额中扣减交易金额的方法, 具体为: 查找应用文件 ADF的地址; 才艮据应用文件 ADF查找 ADF下的 CPU电子 4 包文件的地址; 才艮据查找得到的 CPU电子 4 包文件的地址和预先设定的 CPU电子 4 包 的余额的偏移量来计算用于存储 CPU电子钱包的余额的地址; 读取上述计算得到的用于存储 CPU 电子 4 包的余额的地址所指向的存 储区中的数据, 将读取得到的数据减去交易金额, 并用相减得到的数据覆盖 上述计算得到的用于存储 CPU 电子钱包的余额的地址所指向的存储区中的 数据, 将此相减得到的数据作为 CPU电子钱包新的余额。 步 4聚 543: 更新 CPU电子 4 包的交易明细; 在本实施例中, 需要更新的 CPU电子钱包的相关交易明细具体为: 交易 金额、 交易类型标识、 终端编号、 交易日期和交易时间, 具体地, CPU卡将 交易金额、 交易类型标识、 终端编号、 交易日期和交易时间顺序链接组成一 个 ΐ己录以便更新。 步骤 544: 获得 Ml的扇区密钥; 在本实施例中, 预先约定存储 Ml 电子 4 包的余额的扇区号和块号, 并 根据该预先约定的扇区号来获取 Ml的扇区密钥, 其中获得 Ml的扇区密钥 的方法具体为: 调用 API接口函数 extern WORD GetMifareSectorPassword ( BYTE *secPwdBuf, BYTE blockNo ) 获得 Ml的扇区密钥。 步骤 545 : 将 Ml电子钱包的脱机交易序号加 1 , 并更新 Ml电子钱包的 余额,即用步骤 542中更新后的 CPU电子钱包的余额覆盖 Ml电子钱包的余 额; 在本实施例中, 更新 Ml电子 4 包的余额的方法具体为: 调用 API接口 函数 extern BYTE SetMifarePurseBalance ( BYTE *balanceBuf ), 并利用步骤

514 中获得的扇区密钥设置 Ml 电子 4 包的余额, 即用步骤 542中更新后的 CPU电子 4 包的余额覆盖 Ml电子 4 包的余额; 步 4聚 546: 更新 Ml电子 4 包的交易明细; 具体地,将步骤 543中更新的 CPU电子钱包的交易明细追加到 Ml电子 钱包的交易明细中; 交易明细具体为: 交易金额、 交易类型标识、 终端机编号、 交易日期和 交易时间等。 步骤 547: 生成第四 4艮文鉴别码 MAC4; 在本实施例中, 生成第四 4艮文鉴别码 MAC4方法具体为: 用步骤 537中生成的过程密钥对交易金额进行加密, 得到的加密后的数 据的前四个字节即为第四 艮文鉴别码 MAC4。 步骤 548: 用 DTK左右 8个字节进行异或运算, 并利用异或运算得到的 结果来计算交易 -险证码 TAC码; 在本实施例中, 利用异或运算得到的结果来计算 TAC码的方法具体为: 将交易金额、 交易类型标识、 终端机编号、 终端交易序号、 终端的交易 日期和终端的交易时间顺序链接, 并用异或运算得到的结果对链接得到的数 据进行加密, 得到的加密后的数据的前四个字节即为 TAC码。 步 4聚 549: 返回 DEBIT FOR PURCHASE WITHDRAW命令的响应 4艮文 给终端, 交易结束, 然后返回到步 4聚 516。 其中, INITIALIZE FOR PURCHASE响应 4艮文中包含的数据有 MAC2 和 TAC码。 本实施例提供了一种在 CPU终端对 CPU卡内的 CPU电子 4 包和 Ml电 子钱包进行操作的方法,该方法中对 CPU电子钱包和 M 1电子钱包进行同步, 这样就保证了 CPU电子钱包和 Ml电子钱包的余额的一致,就解决了用户使 用该 CPU卡在 Ml终端非法圏存和 /或非法消费时而造成的 CPU电子钱包和 Ml 电子钱包的余额的大小不一致的问题; 并且在该方法中当接收到圏存命 令时, 则 CPU卡在 CPU终端对 CPU卡内的 CPU电子 4 包和 Ml电子 4 包 进行圏存, 这样就提高了圏存的安全性; 并且在该方法中当接收到消费命令 时,则在 CPU终端使用 CPU卡内的 CPU电子钱包和 Ml电子钱包进行消费, 即从 CPU电子 4 包的余额中扣减相应的交易金额的同时也从 M 1电子 4 包的 余额中也扣减相应的交易金额。 以上仅为本发明的较佳实施例, 并不用以限制本发明, 凡在本发明的精 神和原则之内, 所作的任何修改、 等同替换、 改进等, 均应包含在本发明的 保护范围之内。