一种收条验证方法及系统的制作方法

文档序号:6624546阅读:153来源:国知局
一种收条验证方法及系统的制作方法
【专利摘要】本发明公开了一种收条验证方法及系统,属于信息智能卡领域。上述系统包括卡片和上位机,卡片具体包括:存储模块、接收模块、解析模块、第一获取模块、加载收条组织模块、安装收条组织模块、删除收条组织模块、引渡收条组织模块、发送模块和更新模块,上位机具体包括:通信模块和验证模块。本发明的有益效果在于:通过本发明提供的方法,上位机能够安全有效地获知卡片内容管理操作的执行情况,确认卡片的真实状态。
【专利说明】一种收条验证方法及系统

【技术领域】
[0001]本发明涉及智能卡领域,尤其一种收条验证方法及系统。

【背景技术】
[0002]智能卡,又称智慧卡、聪明卡、集成电路卡及IC卡,是指粘贴或嵌有集成电路芯片的一种便携式卡片。卡片包含了微处理器、I/o接口及存储器,具有数据运算、访问控制及存储的功能。智能卡通过接收并执行上位机发送的APDU数据来完成卡片内容管理操作,所述卡片内容管理操作包括加载操作、安装操作、删除操作和引渡操作。
[0003]发明人在实现本发明的过程中发现,现有技术至少存在以下缺陷:现有技术中,上位机无法获知卡片内容管理操作的完成情况,以致上位机不能确定卡片的真实状态。


【发明内容】

[0004]本发明的目的是为了克服现有技术的缺陷,提供一种收条验证方法及系统。
[0005]本发明方法是通过下述技术方案实现的:
[0006]一方面,本发明提供一种收条验证系统,所述系统具体包括:
[0007]存储模块,用于存储加载文件标识、安全域标识、安全域标识的索引和用户数据;
[0008]接收模块,用于接收上位机发送的APDU数据;
[0009]解析模块,用于对所述接收模块接收到的APDU数据进行解析,以及判断所述APDU数据的类型;
[0010]第一获取模块,用于当所述解析模块判定所述APDU数据为预加载命令时,获取所述预加载命令中的加载文件标识和安全域标识,将从所述预加载命令中获取到的加载文件标识存储到所述存储模块中,确定从所述预加载命令中获取的安全域标识在卡内的索引,以及将确定的安全域标识的索引存储到所述存储模块中;
[0011]加载收条组织模块,用于当所述解析模块判定所述APDU数据为加载命令时组织加载收条;
[0012]安装收条组织模块,用于当所述解析模块判定所述APDU数据为安装命令时组织安装收条;
[0013]删除收条组织模块,用于当所述解析模块判定所述APDU数据为删除命令时组织删除收条;
[0014]引渡收条组织模块,用于当所述解析模块判定所述APDU数据为引渡命令时组织引渡收条;
[0015]发送模块,用于向所述上位机返回所述加载收条组织模块组织得到的加载收条,向所述上位机返回所述安装收条组织模块组织得到的安装收条,向所述上位机返回所述删除收条组织模块组织得到的删除收条,向所述上位机返回所述引渡收条组织模块组织得到的引渡收条,以及向所述上位机返回预设状态码和异常状态码;
[0016]更新模块,用于更新所述卡片内的确认计数器的计数值;
[0017]其中,所述加载收条组织模块具体包括:
[0018]第一获取单元,用于获取所述存储模块中存储的加载文件标识和安全域标识的索弓I ;
[0019]第一查找单元,用于根据所述第一获取单元获取到的安全域标识的索引在所述存储模块中查找相应的安全域标识;
[0020]第一数据组织单元,用于根据所述第一获取单元获取到的加载文件标识和所述第一查找单元查找到的安全域标识组织第一数据;
[0021]第二获取单元,用于获取所述确认计数器的计数值,以及获取所述存储模块中存储的用户数据;
[0022]加载收条数据组织单元,用于当所述第二获取单元获取到的确认计数器的计数值未达到阈值,且所述第二获取单元获取到的用户数据不为空时,根据所述确认计数器的计数值、所述用户数据以及所述第一数据组织单元组织得到的第一数据组织加载收条数据;
[0023]第一签名单元,用于对所述加载收条数据组织单元组织得到的加载收条数据进行签名,得到第一签名数据;
[0024]加载收条组织单元,用于根据所述第一签名单元得到的第一签名数据和所述加载收条数据组织单元组织得到的加载收条数据组织加载收条;
[0025]所述安装收条组织模块具体包括:
[0026]第二数据组织单元,用于根据所述安装命令中的可执行加载文件标识和应用标识组织第二数据;
[0027]第三获取单元,用于获取所述确认计数器的计数值,以及获取所述存储模块中存储的用户数据;
[0028]安装收条数据组织单元,用于当所述第三获取单元获取到的确认计数器的计数值未达到阈值,且所述第三获取单元获取到的用户数据不为空时,根据所述确认计数器的计数值、所述用户数据以及所述第二数据组织单元组织得到的第二数据组织安装收条数据;
[0029]第二签名单元,用于对所述安装收条数据组织单元组织得到的安装收条数据进行签名,得到第二签名数据;
[0030]安装收条组织单元,用于根据所述第二签名单元得到的第二签名数据和所述安装收条数据组织单元组织得到的安装收条数据组织安装收条;
[0031 ] 所述删除收条组织模块具体包括:
[0032]第三数据组织单元,用于根据所述删除命令中的应用标识组织第三数据;
[0033]第四获取单元,用于获取所述确认计数器的计数值,以及获取所述存储模块中存储的用户数据;
[0034]删除收条数据组织单元,用于当所述第四获取单元获取到的确认计数器的计数值未达到阈值,且所述第四获取单元获取到的用户数据不为空时,根据所述确认计数器的计数值、所述用户数据以及所述第三数据组织单元组织得到的第三数据组织删除收条数据;
[0035]第三签名单元,用于对所述删除收条数据组织单元组织得到的删除收条数据进行签名,得到第三签名数据;
[0036]删除收条组织单元,用于根据所述第三签名单元得到的第三签名数据和所述删除收条数据组织单元组织得到的删除收条数据组织删除收条;
[0037]所述引渡收条组织模块具体包括:
[0038]第二查找单元,用于在所述存储模块中查找与所述引渡命令中的应用标识相对应的应用的原安全域标识;
[0039]第四数据组织单元,用于根据所述第二查找单元查找到的原安全域标识,以及所述引渡命令中的应用标识和新安全域标识,组织第四数据;
[0040]第五获取单元,用于获取所述确认计数器的计数值,以及获取所述存储模块中存储的用户数据;
[0041]引渡收条数据组织单元,用于当所述第五获取单元获取到的确认计数器的计数值未达到阈值,且所述第五获取单元获取到的用户数据不为空时,根据所述确认计数器的计数值、所述用户数据以及所述第四数据组织单元组织得到的第四数据组织引渡收条数据;
[0042]第四签名单元,用于对所述引渡收条数据组织单元组织得到的引渡收条数据进行签名,得到第四签名数据;
[0043]引渡收条组织单元,用于根据所述第四签名单元得到的第四签名数据和所述引渡收条数据组织单元组织得到的引渡收条数据组织引渡收条;
[0044]所述上位机包括:
[0045]通信模块,用于接收所述卡片返回的收条;
[0046]验证模块,用于对所述通信模块接收到的收条进行验证。
[0047]另一方面,本发明提供一种收条验证方法,所述方法具体包括:
[0048]步骤A:卡片接收上位机发送的APDU数据,解析所述APDU数据,判断所述APDU数据的类型,若为预加载命令则执行步骤B,若为加载命令则执行步骤C,若为安装命令则执行步骤D,若为删除命令则执行步骤E,若为引渡命令则执行步骤F ;
[0049]步骤B:获取所述预加载命令中的加载文件标识和安全域标识,存储获取到的加载文件标识,确定并记录获取到的安全域标识在所述卡片内的索引,向所述上位机返回预设状态码;
[0050]步骤C:所述卡片获取所述卡片内最近存储的加载文件标识和安全域标识的索弓丨,根据所述安全域标识的索引在所述卡片内查找安全域标识,根据获取到的加载文件标识和查找到的安全域标识组织第一数据,获取所述卡片内的确认计数器的计数值和用户数据,若所述确认计数器的计数值未达到阈值且所述用户数据不为空,则根据所述确认计数器的计数值、所述用户数据以及所述第一数据组织加载收条数据,对所述加载收条数据进行签名运算得到第一签名数据,根据所述第一签名数据和所述加载收条数据组织加载收条,向所述上位机返回所述加载收条,并更新所述确认计数器的计数值,执行步骤G,否则向所述上位机返回异常状态码;
[0051]步骤D:所述卡片根据所述安装命令中的可执行加载文件标识和应用标识组织第二数据,获取所述卡片内的确认计数器的计数值和用户数据,若所述确认计数器的计数值未达到所述阈值且所述用户数据不为空,则根据所述确认计数器的计数值、所述用户数据以及所述第二数据组织安装收条数据,对所述安装收条数据进行签名运算得到第二签名数据,根据所述第二签名数据和所述安装收条数据组织安装收条,向所述上位机返回所述安装收条,并更新所述确认计数器的计数值,执行步骤G,否则向所述上位机返回异常状态码;
[0052]步骤E:所述卡片根据所述删除命令中的应用标识组织第三数据,获取所述卡片内的确认计数器的计数值和用户数据,若所述确认计数器的计数值未达到所述阈值且所述用户数据不为空,则根据所述确认计数器的计数值、所述用户数据以及所述第三数据组织删除收条数据,对所述删除收条数据进行签名运算得到第三签名数据,根据所述第三签名数据和所述删除收条数据组织删除收条,向所述上位机返回所述删除收条,并更新所述确认计数器的计数值,执行步骤G,否则向所述上位机返回异常状态码;
[0053]步骤F:所述卡片根据所述引渡命令中的应用标识查找所述卡片内与所述应用标识对应的应用的原安全域标识,根据查找到的原安全域标识以及所述引渡命令中的应用标识和新安全域标识组织第四数据,获取所述卡片内的确认计数器的计数值和用户数据,若所述确认计数器的计数值未达到所述阈值且所述用户数据不为空,则根据所述确认计数器的计数值、所述用户数据以及所述第四数据组织引渡收条数据,对所述引渡收条数据进行签名运算得到第四签名数据,根据所述第四签名数据和所述引渡收条数据组织引渡收条,向所述上位机返回所述引渡收条,并更新所述确认计数器的计数值,执行步骤G,否则向所述上位机返回异常状态码;
[0054]步骤G:所述上位机接收所述卡片返回的收条,对接收到的收条进行验证,若验证通过,则判定相应地卡片内容管理操作执行成功,若验证失败,则判定相应地卡片内容管理操作执行失败。
[0055]本发明方法的有益效果在于:通过本发明提供的方法,上位机能够安全有效地获知卡片内容管理操作的执行情况,确认卡片的真实状态。

【专利附图】

【附图说明】
[0056]为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0057]图1和图2为本发明实施例1中提供的一种收条验证方法的流程图;
[0058]图3为本发明实施例2中提供的一种收条验证系统的组成框图;
[0059]图4为图3中加载收条组织模块的具体组成框图;
[0060]图5为图3中安装收条组织模块的具体组成框图;
[0061]图6为图3中删除收条组织模块的具体组成框图;
[0062]图7为图3中引渡收条组织模块的具体组成框图。

【具体实施方式】
[0063]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0064]本发明中的安全终端中设置有应用处理器和安全处理器,且安全处理器不设置直接对外接口,实施例1提供的是本地更新方法,实施例2提供的是远程更新方法。
[0065]实施例1
[0066]本发明实施例1提供一种收条验证方法,参见图1和图2,所述方法具体包括:
[0067]步骤101:卡片接收上位机发送的APDU数据;
[0068]步骤102:卡片解析接收到的APDU数据,判断APDU数据的类型,若为用户数据命令则执行步骤103,若为预加载命令则执行步骤104,若为加载命令则执行步骤105,若为安装命令则执行步骤116,若为删除命令则执行步骤125,若为引渡命令则执行步骤134 ;
[0069]本实施例中,卡片解析接收到的APDU数据,检查APDU数据的第二个字节和第三字节,若为0xE280则APDU数据为用户数据命令,若为0xE400则APDU数据为删除命令,若为0xE602则APDU数据为预加载命令,若为0xE604则APDU数据为安装命令,若为0xE610则APDU数据为引渡命令,若为0xE880则APDU数据为加载命令;
[0070]若卡片判定APDU数据为上述命令之外的数据,则卡片根据接收到的APDU数据进行相应处理,此处不做限定。
[0071]步骤103:卡片获取用户数据命令中的用户数据并存储,向上位机返回预设状态码;
[0072]本实施例中,预设状态码为0x9000。
[0073]步骤104:卡片获取预加载命令中的加载文件标识和安全域标识,存储获取到的加载文件标识,确定并记录获取到的安全域标识在卡内的索引,向上位机返回预设状态码;
[0074]本实施例中,卡片获取预加载命令中的第五个字节得到加载文件标识的长度,获取从第六个字节开始,长度等于加载文件标识的长度的数据得到加载文件标识,获取预加载命令中加载文件标识后面的一个字节得到安全域标识的长度,获取从安全域标识的长度后面的一个字节开始,长度等于安全域标识的长度的数据得到安全域标识;
[0075]例如,卡片获取预加载命令中的第五个字节得到加载文件标识的长度为5个字节,则获取从第六个字节至第十个字节得到加载文件标识,获取第十一字节得到安全域标识的长度为6个字节,则获取第十一字节至第十六字节得到安全域标识。
[0076]步骤105:卡片获取卡内最近存储的加载文件标识,和安全域标识在卡内的索引;
[0077]步骤106:卡片根据获取到的安全域标识在卡内的索引在卡内查找安全域标识;
[0078]步骤107:卡片根据获取到的加载文件标识和查找到的安全域标识组织第一数据;
[0079]本实施例中,步骤107具体包括:
[0080]步骤al:卡片初始化加载命令缓冲区的偏移为加载偏移;
[0081]本实施例中,卡片接收到加载命令时创建加载命令缓冲区,将加载命令存储到加载命令缓冲区;
[0082]具体地,加载偏移的初始值为I ;
[0083]步骤a2:卡片更新加载偏移为加载命令缓冲区中的加载命令的数据域的起始位置的偏移,记录当前加载偏移为第一偏移;
[0084]具体地,加载命令的第一字节至第四字节为命令头,从第五字节开始为数据域,SP本实施例中,更新加载偏移为5 ;
[0085]步骤a3:卡片根据加载偏移和获取到的加载文件标识的长度判断加载命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤a4 ;
[0086]具体地,判断加载偏移+加载文件标识的长度+1的值是否大于239,是则加载命令缓冲区会越界,否则加载命令缓冲区不会越界;
[0087]步骤a4:卡片调用预设函数将获取到的加载文件标识写到加载命令缓冲区中偏移等于加载偏移加I的位置;
[0088]本实施例中,预设函数为卡内的arraycopy函数;
[0089]例如,当前加载偏移为5,则将加载文件标识写到加载命令缓冲区中偏移等于6的位置;
[0090]步骤a5:卡片将预设函数的返回值写到加载命令缓冲区中偏移等于加载偏移的位置;
[0091]具体地,此时预设函数的返回值为加载文件标识的长度;
[0092]例如,当前加载偏移为5,则将预设函数返回值写到加载命令缓冲区中偏移等于5的位置;
[0093]步骤a6:卡片根据加载文件标识的长度更新加载偏移;
[0094]具体地,更新后的加载偏移=当前加载偏移+加载文件标识的长度+1 ;
[0095]例如,当前加载偏移为5,加载文件标识的长度为5,则更新加载偏移为11 ;
[0096]步骤a7:卡片根据加载偏移和查找到的安全域标识的长度判断加载命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤a8 ;
[0097]具体地,判断加载偏移+安全域标识的长度+1的值是否大于239,是则加载命令缓冲区会越界,否则加载命令缓冲区不会越界;
[0098]步骤a8:卡片调用预设函数将查找到的安全域标识写到加载命令缓冲区中偏移等于加载偏移加I的位置;
[0099]例如,当前加载偏移为11,则将查找到的安全域标识写到加载命令缓冲区中偏移等于12的位置;
[0100]步骤a9:卡片将预设函数的返回值写到加载命令缓冲区中偏移等于加载偏移的位置;
[0101]具体地,此时预设函数的返回值为安全域标识的长度;
[0102]例如,当前加载偏移为11,则将预设函数返回值写到加载命令缓冲区中偏移等于11的位置;
[0103]步骤alO:卡片根据安全域标识的长度更新加载偏移;
[0104]具体地,更新后的加载偏移=当前加载偏移+安全域标识的长度+1 ;
[0105]例如,当前加载偏移为11,安全域标识的长度为5,则更新加载偏移为17 ;
[0106]本实施例中,第一数据具体为加载命令缓冲区中,从偏移等于第一偏移开始至偏移等于当前加载偏移之前的数据,例如当前加载偏移为17,则第一数据具体为加载命令缓冲区中的第五个字节至第十六个字节。
[0107]步骤108:卡片获取卡内确认计数器的计数值;
[0108]本实施例中,确认计数器的计数值的初始值为0x0000。
[0109]步骤109:卡片判断确认计数器的计数值是否达到阈值,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤110 ;
[0110]本实施例中,确认计数器的计数值的阈值具体为0x7FFF。
[0111]步骤110:卡片获取卡内存储的用户数据;
[0112]步骤111:卡片判断用户数据是否为空,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤112;
[0113]步骤112:卡片根据确认计数器的计数值、用户数据以及第一数据组织加载收条数据;
[0114]本实施例中,步骤112具体包括:
[0115]步骤all:卡片记录当前加载偏移为第二偏移;
[0116]步骤al2:卡片根据加载偏移和确认计数器的计数值的长度判断加载命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤al3 ;
[0117]具体地,判断加载偏移+确认计数器的计数值的长度+1的值是否大于239,是则加载命令缓冲区会越界,否则加载命令缓冲区不会越界;
[0118]步骤al3:卡片将确认计数器的计数值的长度写到加载命令缓冲区中偏移等于加载偏移的位置,将确认计数器的计数值写到加载命令缓冲区中偏移等于加载偏移加I的位置;
[0119]例如,当前加载偏移为17,则将确认计数器的计数值的长度写到加载命令缓冲区中偏移等于17的位置,将确认计数器的计数值写到加载命令缓冲区中偏移等于18的位置;
[0120]步骤al4:卡片根据确认计数器的计数值的长度更新加载偏移;
[0121]具体地,更新后的加载偏移=当前加载偏移+确认计数器的计数值的长度+1 ;
[0122]例如,当前加载偏移为17,确认计数器的计数值的长度为2,则更新加载偏移为20 ;
[0123]步骤al5:卡片根据加载偏移和用户数据的长度判断加载命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤al7 ;
[0124]具体地,判断加载偏移+用户数据的长度+1的值是否大于239,是则加载命令缓冲区会越界,否则加载命令缓冲区不会越界;
[0125]步骤al6:卡片将用户数据的长度写到加载命令缓冲区中偏移等于加载偏移的位置,将用户数据写到加载命令缓冲区中偏移等于加载偏移加I的位置;
[0126]例如,当前加载偏移为20,则将用户数据的长度写到加载命令缓冲区中偏移等于20的位置,将用户数据写到加载命令缓冲区中偏移等于21的位置;
[0127]步骤al7:卡片根据用户数据的长度更新加载偏移;
[0128]具体地,更新后的加载偏移=当前加载偏移+用户数据的长度+1 ;
[0129]例如,当前加载偏移为20,用户数据的长度为4,则更新加载偏移为25 ;
[0130]步骤al8:卡片根据加载偏移和第一数据的长度判断加载命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤a20 ;
[0131]具体地,判断加载偏移+第一数据的长度的值是否大于239,是则加载命令缓冲区会越界,否则加载命令缓冲区不会越界;
[0132]步骤al9:卡片将第一数据写到加载命令缓冲区中偏移等于加载偏移的位置;
[0133]本实施例中,步骤al9具体为:将加载命令缓冲区中从偏移等于第一偏移开始至偏移等于第二偏移之前的数据,写到加载命令缓冲区中偏移等于加载偏移的位置;
[0134]例如,当前加载偏移为25,则将第一数据写到加载命令缓冲区中偏移等于25的位置;
[0135]步骤a20:卡片根据第一数据的长度更新加载命令缓冲区的偏移;
[0136]具体地,更新后的加载偏移=当前加载偏移+第一数据的长度;
[0137]例如,当前加载偏移为25,第一数据的长度为12,则更新加载偏移为37 ;
[0138]本实施例中,加载收条数据具体为加载命令缓冲区中,从偏移等于第二偏移至当前加载偏移之前的数据,例如当前加载偏移为37,则加载收条数据具体为加载命令缓冲区中的第十七个字节至第三十六个字节。
[0139]步骤113:卡片使用预设算法对加载收条数据进行签名运算,得到第一签名数据;
[0140]本实施例中,预设算法具体为ALG_DES_MAC8_IS09797_1_M2_ALG3算法。
[0141]步骤114:卡片根据第一签名数据和加载收条数据组织加载收条;
[0142]本实施例中,步骤114具体包括:
[0143]步骤a21:卡片记录当前加载偏移为第三偏移;
[0144]步骤a22:卡片根据第一偏移更新加载偏移;
[0145]本实施例中,更新后的加载偏移=第一偏移+1 ;
[0146]例如,第一偏移等于5,则更新加载偏移为6 ;
[0147]步骤a23:卡片将第一签名数据的长度写到加载命令缓冲区中偏移等于加载偏移的位置,将第一签名数据写到加载命令缓冲区中加载偏移加I的位置;
[0148]例如,当前加载偏移为6,则将第一签名数据的长度写到加载命令缓冲区中偏移等于6的位置,将第一签名数据写到加载命令缓冲区中偏移等于7的位置;
[0149]步骤a24:卡片根据第一签名数据的长度更新加载偏移;
[0150]具体地,更新后的加载偏移=当前加载偏移+第一签名数据的长度+1 ;
[0151]例如,当前加载偏移为6,第一签名数据的长度为8,则更新加载偏移为15;
[0152]步骤a25:卡片根据加载偏移和加载收条数据的长度判断加载命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤a26 ;
[0153]具体地,判断加载偏移+加载收条数据的长度的值是否大于239,是则加载命令缓冲区会越界,否则加载命令缓冲区不会越界;
[0154]步骤a26:卡片将加载收条数据写到加载命令缓冲区中偏移等于加载偏移的位置;
[0155]本实施例中,步骤a26具体为,将加载命令缓冲区中,从偏移等于第二偏移至偏移等于第三偏移之前的数据写到加载命令缓冲区中偏移等于加载偏移的位置;
[0156]例如,当前加载偏移为15,则将加载收条数据写到加载命令缓冲区中偏移等于15的位置;
[0157]步骤a27:卡片根据加载收条数据的长度更新加载偏移;
[0158]具体地,更新后的加载偏移=当前加载偏移+加载收条数据的长度;
[0159]例如,加载收条数据的长度为20,则更新加载偏移为35 ;
[0160]步骤a28:卡片计算加载收条中的数据的长度;
[0161]本实施例中,加载收条为长度+数据的格式,加载收条中的数据具体为加载命令缓冲区中,从偏移等于第一偏移之后至当前加载偏移之前的数据,加载收条中的数据的长度=当前加载偏移-第一偏移-1;
[0162]例如,第一偏移为5,当前加载偏移为35,则加载收条中的数据的长度为29。
[0163]步骤a29:卡片将加载收条中的数据的长度写到加载命令缓冲区中偏移等于第一偏移的位置。
[0164]例如,第一偏移为5,则将加载收条中的数据的长度写到加载命令缓冲区中偏移等于5的位置。
[0165]步骤115:卡片向上位机返回加载收条,并更新卡内确认计数器的计数值,执行步骤 144 ;
[0166]本实施例中,加载收条具体为加载命令缓冲区中,从偏移等于第一偏移开始至偏移等于当前加载偏移之前的数据;
[0167]具体地,更新卡内确认计数器的计数值为其当前值加I。
[0168]步骤116:卡片根据安装命令中的可执行加载文件标识和应用标识组织第二数据;
[0169]本实施例中,步骤116具体包括:
[0170]步骤bl:卡片初始化安装命令缓冲区的偏移为安装偏移;
[0171]本实施例中,卡片接收到安装命令时创建安装命令缓冲区,将安装命令存储到安装命令缓冲区;
[0172]具体地,卡片初始化安装偏移为I ;
[0173]步骤b2:卡片更新安装偏移为安装命令缓冲区中的安装命令的数据域的起始位置的偏移,记录当前安装偏移为第四偏移;
[0174]具体地,安装命令的第一字节至第四字节为命令头,从第五字节开始为数据域,SP本实施例中,更新安装偏移为5 ;
[0175]步骤b3:卡片读取安装命令缓冲区中偏移等于安装偏移的位置的数据,得到可执行加载文件标识的长度,更新安装偏移为其当前值加I ;
[0176]例如,当前安装偏移为5,则读取安装命令缓冲区中偏移等于5的位置的数据,得到可执行加载文件标识的长度,更新安装偏移为6 ;
[0177]步骤b4:卡片读取安装命令缓冲区中从偏移等于安装偏移的位置开始,长度等于可执行加载文件标识的长度的数据,得到可执行加载文件标识,更新安装偏移为其当前值加上可执行加载文件标识的长度;
[0178]例如,当前安装偏移为6,可执行加载文件标识的长度为5,则读取安装命令缓冲区中从偏移等于6的位置开始,长度等于5的数据,即安装命令缓冲区中第六字节至第十字节的数据,得到可执行加载文件标识,更新安装偏移为11 ;
[0179]步骤b5:卡片记录当前安装偏移为第五偏移;
[0180]步骤b6:卡片读取安装命令缓冲区中偏移等于安装偏移的位置的数据,得到可执行模块标识的长度,更新安装偏移为其当前值加I ;
[0181]例如,当前安装偏移为5,则读取安装命令缓冲区中偏移等于11的位置的数据,得到可执行模块标识的长度,更新安装偏移为12 ;
[0182]步骤b7:卡片读取安装命令缓冲区中从偏移等于安装偏移的位置开始,长度等于可执行模块标识的长度的数据,得到可执行模块标识,更新安装偏移为其当前值加上可执行模块标识的长度;
[0183]例如,当前安装偏移为12,可执行加载文件标识的长度为5,则读取安装命令缓冲区中从偏移等于12的位置开始,长度等于5的数据,即安装命令缓冲区中第十二字节至第十六字节的数据,得到可执行模块标识,更新安装偏移为17 ;
[0184]步骤b8:卡片读取安装命令缓冲区中偏移等于安装偏移的位置的数据,得到应用标识的长度,更新安装偏移为其当前值加I ;
[0185]例如,当前安装偏移为17,则读取安装命令缓冲区中偏移等于17的位置的数据,得到应用标识的长度,更新安装偏移为18 ;
[0186]步骤b9:卡片读取安装命令缓冲区中从偏移等于安装偏移的位置开始,长度等于应用标识的长度的数据,得到应用标识;
[0187]例如,当前安装偏移为18,应用标识的长度为5,则读取安装命令缓冲区中从偏移等于18的位置开始,长度等于5的数据,即安装命令缓冲区中第十八字节至第二十二字节的数据,得到应用标识;
[0188]步骤blO:卡片更新安装偏移为第五偏移;
[0189]步骤bll:卡片根据安装偏移和应用标识的长度判断安装命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤bl2 ;
[0190]具体地,判断安装偏移+应用标识的长度+1的值是否大于239,是则安装命令缓冲区会越界,否则安装命令缓冲区不会越界;
[0191]步骤bl2:卡片将应用标识的长度写到安装命令缓冲区中偏移等于安装偏移的位置,更新安装偏移为其当前值加I ;
[0192]例如,当前安装偏移为11,则将应用标识的长度写到安装命令缓冲区中偏移等于11的位置,更新安装偏移为12 ;
[0193]步骤bl3:卡片将应用标识写到安装命令缓冲区中偏移等于安装偏移的位置,更新安装偏移为其当前值加上应用标识的长度;
[0194]例如,当前安装偏移为12,应用标识的长度为5,则将应用标识的长度写到安装命令缓冲区中偏移等于12的位置,更新安装偏移为17 ;
[0195]本实施例中,第二数据具体为安装命令缓冲区中,从偏移等于第四偏移开始至偏移等于当前安装偏移之前的数据,例如当前加载命令缓冲区的偏移为17,则第二数据具体为安装命令缓冲区中的第五个字节至第十六个字节。
[0196]步骤117:卡片获取卡内确认计数器的计数值;
[0197]步骤118:卡片判断确认计数器的计数值是否达到阈值,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤119 ;
[0198]步骤119:卡片获取卡内存储的用户数据;
[0199]步骤120:卡片判断用户数据是否为空,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤121 ;
[0200]步骤121:卡片根据确认计数器的计数值、用户数据以及第二数据组织安装收条数据;
[0201]本实施例中,步骤121具体包括:
[0202]步骤bl4:卡片记录当前安装偏移为第六偏移;
[0203]步骤bl5:卡片根据安装偏移和确认计数器的计数值的长度判断安装命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤bl6 ;
[0204]具体地,判断安装偏移+确认计数器的计数值的长度+1的值是否大于239,是则安装命令缓冲区会越界,否则安装命令缓冲区不会越界;
[0205]步骤bl6:卡片将确认计数器的计数值的长度写到安装命令缓冲区中偏移等于安装偏移的位置,将确认计数器的计数值写到安装命令缓冲区中偏移等于安装偏移加I的位置;
[0206]例如,当前安装偏移为17,则将确认计数器的计数值的长度写到安装命令缓冲区中偏移等于17的位置,将确认计数器的计数值写到安装命令缓冲区中偏移等于18的位置;
[0207]步骤bl7:卡片根据确认计数器的计数值的长度更新安装偏移;
[0208]具体地,更新后的安装偏移=当前安装偏移+确认计数器的计数值的长度+1 ;
[0209]例如,当前安装偏移为17,确认计数器的计数值的长度为2,则更新加安装偏移为20 ;
[0210]步骤bl8:卡片根据安装偏移和用户数据的长度判断安装命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤bl9 ;
[0211]具体地,判断安装偏移+用户数据的长度+1的值是否大于239,是则安装命令缓冲区会越界,否则安装命令缓冲区不会越界;
[0212]步骤bl9:卡片将用户数据的长度写到安装命令缓冲区中偏移等于安装偏移的位置,将用户数据写到安装命令缓冲区中偏移等于安装偏移加I的位置;
[0213]例如,当前安装偏移为20,则将用户数据的长度写到安装命令缓冲区中偏移等于20的位置,将用户数据写到安装命令缓冲区中偏移等于21的位置;
[0214]步骤b20:卡片根据用户数据的长度更新安装偏移;
[0215]具体地,更新后的安装偏移=当前安装偏移+用户数据的长度+1 ;
[0216]例如,当前安装偏移为20,用户数据的长度为4,则更新安装偏移为25 ;
[0217]步骤b21:卡片根据安装偏移和第二数据的长度判断安装命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤b22 ;
[0218]具体地,判断安装偏移+第二数据的长度的值是否大于239,是则安装命令缓冲区会越界,否则安装命令缓冲区不会越界;
[0219]步骤b22:卡片将第二数据写到安装命令缓冲区中偏移等于安装偏移的位置;
[0220]本实施例中,步骤b22具体为:将安装命令缓冲区中,从偏移等于第四偏移开始至偏移等于第五偏移之前的数据写到安装命令缓冲区中偏移等于安装偏移的位置;
[0221]例如,当前安装命令缓冲区的偏移为25,则将第二数据写到安装命令缓冲区中偏移等于25的位置;
[0222]步骤b23:卡片根据第二数据的长度更新安装偏移;
[0223]具体地,更新后的安装偏移=当前安装偏移+第二数据的长度;
[0224]例如,当前安装偏移为25,第二数据的长度为12,则更新安装偏移为37 ;
[0225]本实施例中,安装收条数据具体为安装命令缓冲区中,从偏移等于第六偏移开始至偏移等于当前安装偏移之前的数据,例如当前安装偏移为37,则安装收条数据具体为安装命令缓冲区中的第十七个字节至第三十六个字节。
[0226]步骤122:卡片使用预设算法对安装收条数据进行签名运算,得到第二签名数据;
[0227]本实施例中,预设算法具体为ALG_DES_MAC8_IS09797_1_M2_ALG3算法。
[0228]步骤123:卡片根据第二签名数据和安装收条数据组织安装收条;
[0229]本实施例中,步骤123具体包括:
[0230]步骤b24:卡片记录当前安装偏移为第七偏移;
[0231]步骤b25:卡片根据第四偏移更新安装偏移;
[0232]本实施例中,更新后的安装偏移=第四偏移+1 ;
[0233]例如,第四偏移等于5,则更新安装偏移为6 ;
[0234]步骤b26:卡片将第二签名数据的长度写到安装命令缓冲区中偏移等于安装偏移的位置,将第二签名数据写到安装命令缓冲区中安装偏移加I的位置;
[0235]例如,当前安装偏移为6,则将第二签名数据的长度写到安装命令缓冲区中偏移等于6的位置,将第二签名数据写到安装命令缓冲区中偏移等于7的位置;
[0236]步骤b27:卡片根据第二签名数据的长度更新安装偏移;
[0237]具体地,更新后的安装偏移=当前安装偏移+第二签名数据的长度+1 ;
[0238]例如,当前安装偏移为6,第二签名数据的长度为8,则更新安装偏移为15 ;
[0239]步骤b28:卡片根据安装偏移和安装收条数据的长度判断安装命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤b29 ;
[0240]具体地,判断安装偏移+安装收条数据的长度的值是否大于239,是则安装命令缓冲区会越界,否则安装命令缓冲区不会越界;
[0241]步骤b29:卡片将安装收条数据写到安装命令缓冲区中偏移等于安装偏移的位置;
[0242]本实施例中,步骤b29具体为,将安装命令缓冲区中,偏移等于第六偏移开始至偏移等于第七偏移之前的数据写到安装命令缓冲区中偏移等于安装偏移的位置;
[0243]例如,当前安装偏移为15,则将安装收条数据写到安装命令缓冲区中偏移等于15的位置;
[0244]步骤b30:卡片根据安装收条数据的长度更新安装偏移;
[0245]具体地,更新后的安装偏移=当前安装偏移+安装收条数据的长度;
[0246]例如,安装收条数据的长度为20,则更新安装偏移为35 ;
[0247]步骤b31:卡片计算安装收条中的数据的长度;
[0248]本实施例中,安装收条为长度+数据的格式,安装收条中的数据具体为安装命令缓冲区中从偏移等于第四偏移之后至偏移等于当前安装偏移之前的数据,安装收条中的数据的长度=当前安装偏移_第四偏移_1 ;
[0249]例如,第四偏移为5,当前安装偏移为35,则安装收条中的数据的长度为29。
[0250]步骤b32:卡片将安装收条中的数据的长度写到安装命令缓冲区中偏移等于第四偏移的位置。
[0251]例如,第四偏移为5,则将安装收条中的数据的长度写到安装命令缓冲区中偏移等于5的位置。
[0252]步骤124:卡片向上位机返回安装收条,并更新卡内确认计数器的计数值,执行步骤 144 ;
[0253]本实施例中,安装收条具体为安装命令缓冲区中,从偏移等于第四偏移开始至偏移等于当前安装偏移之前的数据;
[0254]具体地,更新卡内确认计数器的计数值为其当前值加I。
[0255]步骤125:卡片根据删除命令中的应用标识组织第三数据;
[0256]本实施例中,步骤125具体包括:
[0257]步骤Cl:卡片初始化删除命令缓冲区的偏移为删除偏移;
[0258]本实施例中,卡片接收到删除命令时创建删除命令缓冲区,将删除命令存储到删除命令缓冲区;
[0259]具体地,卡片初始化删除偏移为I ;
[0260]步骤c2:卡片更新删除偏移为删除命令缓冲区中的删除命令的数据域的起始位置的偏移,记录当前删除偏移为第八偏移;
[0261]具体地,删除命令的第一字节至第四字节为命令头,从第五字节开始为数据域,SP本实施例中,更新删除偏移为5 ;
[0262]步骤c3:卡片读取删除命令缓冲区中偏移等于删除偏移的位置的数据,得到应用标识的长度,更新删除偏移为其当前值加I ;
[0263]例如,当前删除偏移为5,则读取删除命令缓冲区中偏移等于5的位置的数据,得到应用标识的长度,更新删除偏移为6 ;
[0264]步骤c4:卡片读取删除命令缓冲区中从偏移等于删除偏移的位置开始,长度等于应用标识的长度的数据,得到应用标识,更新删除偏移为其当前值加上应用标识的长度;
[0265]例如,当前删除偏移为6,应用标识的长度为5,则读取删除命令缓冲区中从偏移等于6的位置开始,长度等于5的数据,即删除命令缓冲区中第六字节至第十字节的数据,得到应用标识,更新删除偏移为11 ;
[0266]本实施例中,第三数据具体为删除命令缓冲区中从偏移等于第八偏移至偏移等于当前删除偏移之前的数据,例如当前删除偏移为11,则第三数据具体为删除命令缓冲区中的第五个字节至第十个字节。
[0267]步骤126:卡片获取卡内确认计数器的计数值;
[0268]步骤127:卡片判断确认计数器的计数值是否达到阈值,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤128 ;
[0269]步骤128:卡片获取卡内存储的用户数据;
[0270]步骤129:卡片判断用户数据是否为空,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤130;
[0271]步骤130:卡片根据确认计数器的计数值、用户数据以及第三数据组织删除收条数据;
[0272]本实施例中,步骤130具体包括:
[0273]步骤c5:卡片记录当前删除偏移为第九偏移;
[0274]步骤c6:卡片根据删除偏移和确认计数器的计数值的长度判断删除命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤c7 ;
[0275]具体地,判断删除偏移+确认计数器的计数值的长度+1的值是否大于239,是则删除命令缓冲区会越界,否则删除命令缓冲区不会越界;
[0276]步骤C7:卡片将确认计数器的计数值的长度写到删除命令缓冲区中偏移等于删除偏移的位置,将确认计数器的计数值写到删除命令缓冲区中偏移等于删除偏移加I的位置;
[0277]例如,当前删除偏移为11,则将确认计数器的计数值的长度写到删除命令缓冲区中偏移等于11的位置,将确认计数器的计数值写到删除命令缓冲区中偏移等于12的位置;
[0278]步骤c8:卡片根据确认计数器的计数值的长度更新删除偏移;
[0279]具体地,更新后的删除偏移=当前删除偏移+确认计数器的计数值的长度+1 ;
[0280]例如,当前删除偏移为11,确认计数器的计数值的长度为2,则更新删除命令缓冲区的偏移为14 ;
[0281]步骤c9:卡片根据删除偏移和用户数据的长度判断删除命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤ClO ;
[0282]具体地,判断删除偏移+用户数据的长度+1的值是否大于239,是则删除命令缓冲区会越界,否则删除命令缓冲区不会越界;
[0283]步骤ClO:卡片将用户数据的长度写到删除命令缓冲区中偏移等于删除偏移的位置,将用户数据写到删除命令缓冲区中偏移等于删除偏移加I的位置;
[0284]例如,当前删除偏移为14,则将用户数据的长度写到删除命令缓冲区中偏移等于14的位置,将用户数据写到删除命令缓冲区中偏移等于15的位置;
[0285]步骤cll:卡片根据用户数据的长度更新删除偏移;
[0286]具体地,更新后的删除偏移=当前删除偏移+用户数据的长度+1 ;
[0287]例如,当前删除偏移为14,用户数据的长度为4,则更新删除偏移为19 ;
[0288]步骤cl2:卡片根据删除偏移和第三数据的长度判断删除命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤cl3 ;
[0289]具体地,判断删除偏移+第三数据的长度的值是否大于239,是则删除命令缓冲区会越界,否则删除命令缓冲区不会越界;
[0290]步骤cl3:卡片将第三数据写到删除命令缓冲区中偏移等于删除偏移的位置;
[0291]本实施例中,步骤cl3具体为:将删除命令缓冲区中从偏移等于第八偏移至偏移等于第九偏移之前的数据写到删除命令缓冲区中偏移等于删除偏移的位置;
[0292]例如,当前删除偏移为19,则将第三数据写到删除命令缓冲区中偏移等于19的位置;
[0293]步骤cl4:卡片根据第三数据的长度更新删除偏移;
[0294]具体地,更新后的删除偏移=当前删除偏移+第三数据的长度;
[0295]例如,当前删除偏移为19,第三数据的长度为6,则更新删除偏移为25 ;
[0296]本实施例中,删除收条数据具体为删除命令缓冲区中偏移等于第九偏移至偏移等于当前删除偏移之前数据,例如当前删除偏移为25,则删除收条数据具体为删除命令缓冲区中的第十一个字节至第二十四个字节。
[0297]步骤131:卡片使用预设算法对删除收条数据进行签名运算,得到第三签名数据;
[0298]本实施例中,预设算法具体为ALG_DES_MAC8_IS09797_1_M2_ALG3算法。
[0299]步骤132:卡片根据第三签名数据和删除收条数据组织删除收条;
[0300]本实施例中,步骤132具体包括:
[0301]步骤C15:卡片记录当前删除偏移为第十偏移;
[0302]步骤cl6:卡片根据第八偏移更新删除偏移;
[0303]本实施例中,更新后的删除偏移=第八偏移+1 ;
[0304]例如,第八偏移等于5,则更新删除偏移为6 ;
[0305]步骤cl7:卡片将第三签名数据的长度写到删除命令缓冲区中偏移等于删除偏移的位置,将第三签名数据写到删除命令缓冲区中偏移等于删除偏移加I的位置;
[0306]例如,当前删除偏移为6,则将第三签名数据的长度写到删除命令缓冲区中偏移等于6的位置,将第三签名数据写到删除命令缓冲区中偏移等于7的位置;
[0307]步骤cl8:卡片根据第三签名数据的长度更新删除偏移;
[0308]具体地,更新后的删除偏移=当前删除偏移+第三签名数据的长度+1 ;
[0309]例如,当前删除偏移为6,第三签名数据的长度为8,则更新删除偏移为15 ;
[0310]步骤cl9:卡片根据删除偏移和删除收条数据的长度判断删除命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤c20 ;
[0311]具体地,判断删除偏移+删除收条数据的长度的值是否大于239,是则删除命令缓冲区会越界,否则删除命令缓冲区不会越界;
[0312]步骤c20:卡片将删除收条数据写到删除命令缓冲区中偏移等于删除偏移的位置;
[0313]本实施例中,步骤c20具体为,将删除命令缓冲区中从偏移等于第九偏移至偏移等于第十偏移之前的数据写到删除命令缓冲区中偏移等于删除偏移的位置;
[0314]例如,当前删除偏移为15,则将删除收条数据写到删除命令缓冲区中偏移等于15的位置;
[0315]步骤c21:卡片根据删除收条数据的长度更新删除偏移;
[0316]具体地,更新后的删除偏移=当前删除偏移+删除收条数据的长度;
[0317]例如,删除收条数据的长度为14,则更新删除偏移为29 ;
[0318]步骤c22:卡片计算删除收条中的数据的长度;
[0319]本实施例中,删除收条为长度+数据的格式,删除收条中的数据具体为删除命令缓冲区中从偏移等于第八偏移之后至偏移等于当前删除偏移之前的数据,删除收条中的数据的长度=当前删除偏移-第八偏移-1 ;
[0320]例如,第八偏移为5,当前删除偏移为29,则删除收条中的数据的长度为23。
[0321]步骤c23:卡片将删除收条中的数据的长度写到删除命令缓冲区中偏移等于第八偏移的位置。
[0322]例如,第八偏移为5,则将删除收条中的数据的长度写到删除命令缓冲区中偏移等于5的位置。
[0323]步骤133:卡片向上位机返回删除收条,并更新卡内确认计数器的计数值,执行步骤 144 ;
[0324]本实施例中,删除收条具体为删除命令缓冲区中,从偏移等于第八偏移开始至偏移等于当前删除偏移之前的数据;
[0325]具体地,更新卡内确认计数器的计数值为其当前值加I。
[0326]步骤134:卡片根据引渡命令中的应用标识查找卡内与该应用标识对应的应用的原安全域标识;
[0327]本实施例中,步骤134具体包括:
[0328]步骤dl:卡片初始化引渡命令缓冲区的偏移为引渡偏移;
[0329]本实施例中,卡片接收到引渡命令时创建引渡命令缓冲区,将引渡命令存储到引渡命令缓冲区;
[0330]具体地,卡片初始化引渡偏移为I ;
[0331]步骤d2:卡片更新引渡偏移为引渡命令缓冲区中的引渡命令的数据域的起始位置的偏移,记录当前引渡偏移为第十一偏移;
[0332]具体地,引渡命令的第一字节至第四字节为命令头,从第五字节开始为数据域,SP本实施例中,更新引渡偏移为5 ;
[0333]步骤d3:卡片读取引渡命令缓冲区中偏移等于引渡偏移的位置的数据,得到新安全域标识的长度,更新引渡偏移为其当前值加I ;
[0334]例如,当前引渡偏移为5,则读取引渡命令缓冲区中偏移等于5的位置的数据,得到新安全域标识的长度,更新引渡偏移为6 ;
[0335]步骤d4:卡片读取引渡命令缓冲区中从偏移等于引渡偏移的位置开始,长度等于新安全域标识的长度的数据,得到新安全域标识,更新引渡偏移为其当前值加上新安全域标识的长度;
[0336]例如,当前引渡偏移为6,新安全域标识的长度为5,则读取引渡命令缓冲区中从偏移等于6的位置开始,长度等于5的数据,S卩引渡命令缓冲区中第六字节至第十字节的数据,得到新安全域标识,更新引渡偏移为11 ;
[0337]步骤d5:卡片读取引渡命令缓冲区中偏移等于引渡偏移的位置的数据,得到应用标识的长度,更新引渡偏移为其当前值加I ;
[0338]例如,当前引渡偏移为11,则读取引渡命令缓冲区中偏移等于11的位置的数据,得到应用标识的长度,更新引渡偏移为12 ;
[0339]步骤d6:卡片读取引渡命令缓冲区中从偏移等于引渡偏移的位置开始,长度等于应用标识的长度的数据,得到应用标识,更新引渡偏移为其当前值加上应用标识的长度;
[0340]例如,当前引渡偏移为12,应用标识的长度为5,则读取引渡命令缓冲区中从偏移等于12的位置开始,长度等于5的数据,S卩引渡命令缓冲区中第十二字节至第十六字节的数据,得到应用标识,更新引渡偏移为17 ;
[0341]步骤d7:卡片在卡内查找与应用标识对应的应用的原安全域标识;
[0342]步骤135:卡片根据查找到的原安全域标识以及引渡命令中的应用标识和新安全域标识组织第四数据;
[0343]本实施例中,步骤135具体包括:
[0344]步骤d8:卡片记录当前引渡偏移为第十二偏移;
[0345]步骤d9:卡片根据引渡偏移和原安全域标识的长度判断引渡命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤dlO ;
[0346]具体地,判断引渡偏移+原安全域标识的长度+1的值是否大于239,是则引渡命令缓冲区会越界,否则引渡命令缓冲区不会越界;
[0347]步骤dlO:将原安全域标识的长度写到引渡命令缓冲区中偏移等于引渡偏移的位置,将原安全域标识写到引渡命令缓冲区中偏移等于引渡偏移加I的位置;
[0348]例如,当前引渡偏移为17,则将原安全域标识的长度写到引渡命令缓冲区中偏移等于17的位置,将原安全域标识写到引渡命令缓冲区中偏移等于18的位置;
[0349]步骤dll:卡片根据原安全域标识的长度更新引渡偏移;
[0350]具体地,更新后的引渡偏移=当前引渡偏移+原安全域标识的长度+1 ;
[0351]例如,当前引渡偏移为17,原安全域标识的长度为5,则更新引渡偏移为23 ;
[0352]步骤dl2:卡片根据引渡偏移和应用标识的长度判断引渡命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤dl3 ;
[0353]具体地,判断引渡偏移+应用标识的长度+1的值是否大于239,是则引渡命令缓冲区会越界,否则引渡命令缓冲区不会越界;
[0354]步骤dl3:将应用标识的长度写到引渡命令缓冲区中偏移等于引渡偏移的位置,将应用标识写到引渡命令缓冲区中偏移等于引渡偏移加I的位置;
[0355]例如,当前引渡偏移为23,则将应用标识的长度写到引渡命令缓冲区中偏移等于23的位置,将应用标识写到引渡命令缓冲区中偏移等于24的位置;
[0356]步骤dl4:卡片根据应用标识的长度更新引渡偏移;
[0357]具体地,更新后的引渡偏移=当前引渡偏移+应用标识的长度+1 ;
[0358]例如,当前引渡偏移为23,应用标识的长度为5,则更新引渡偏移为29 ;
[0359]步骤dl5:卡片根据引渡偏移和新安全域标识的长度判断引渡命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤dl6 ;
[0360]具体地,判断引渡偏移+新安全域标识的长度+1的值是否大于239,是则引渡命令缓冲区会越界,否则引渡命令缓冲区不会越界;
[0361]步骤dl6:将新安全域标识的长度写到引渡命令缓冲区中偏移等于引渡偏移的位置,将新安全域标识写到引渡命令缓冲区中偏移等于引渡偏移加I的位置;
[0362]例如,当前引渡偏移为29,则将新安全域标识的长度写到引渡命令缓冲区中偏移等于29的位置,将新安全域标识写到引渡命令缓冲区中偏移等于30的位置;
[0363]步骤dl7:卡片根据新安全域标识的长度更新引渡偏移;
[0364]具体地,更新后的引渡偏移=当前引渡偏移+新安全域标识的长度+1 ;
[0365]例如,当前引渡偏移为29,新安全域标识的长度为5,则更新引渡偏移为35 ;
[0366]本实施例中,第四数据具体为引渡命令缓冲区中从偏移等于第十二偏移至偏移等于当前引渡偏移之前的数据,例如当前引渡偏移为35,第十二偏移为17,则第四数据具体为弓I渡命令缓冲区中的第十七个字节至第三十四个字节。
[0367]步骤136:卡片获取卡内确认计数器的计数值;
[0368]步骤137:卡片判断确认计数器的计数值是否达到阈值,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤138 ;
[0369]步骤138:卡片获取卡内存储的用户数据;
[0370]步骤139:卡片判断用户数据是否为空,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤140;
[0371]步骤140:卡片根据确认计数器的计数值、用户数据以及第四数据组织引渡收条数据;
[0372]本实施例中,步骤140具体包括:
[0373]步骤dl8:卡片记录当前引渡偏移为第十三偏移;
[0374]步骤dl9:卡片根据引渡偏移和确认计数器的计数值的长度判断引渡命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤d20 ;
[0375]具体地,判断引渡偏移+确认计数器的计数值的长度+1的值是否大于239,是则引渡命令缓冲区会越界,否则引渡命令缓冲区不会越界;
[0376]步骤d20:卡片将确认计数器的计数值的长度写到引渡命令缓冲区中偏移等于引渡偏移的位置,将确认计数器的计数值写到引渡命令缓冲区中偏移等于引渡偏移加I的位置;
[0377]例如,当前引渡偏移为35,则将确认计数器的计数值的长度写到引渡命令缓冲区中偏移等于35的位置,将确认计数器的计数值写到引渡命令缓冲区中偏移等于36的位置;
[0378]步骤d21:卡片根据确认计数器的计数值的长度更新引渡偏移;
[0379]具体地,更新后的引渡偏移=当前引渡偏移+确认计数器的计数值的长度+1 ;
[0380]例如,当前引渡偏移为35,确认计数器的计数值的长度为2,则更新引渡偏移为38 ;
[0381]步骤d22:卡片根据引渡偏移和用户数据的长度判断引渡命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤d23 ;
[0382]具体地,判断引渡偏移+用户数据的长度+1的值是否大于239,是则引渡命令缓冲区会越界,否则引渡命令缓冲区不会越界;
[0383]步骤d23:卡片将用户数据的长度写到引渡命令缓冲区中偏移等于引渡偏移的位置,将用户数据写到引渡命令缓冲区中偏移等于引渡偏移加I的位置;
[0384]例如,当前引渡偏移为38,则将用户数据的长度写到引渡命令缓冲区中偏移等于38的位置,将用户数据写到引渡命令缓冲区中偏移等于39的位置;
[0385]步骤d24:卡片根据用户数据的长度更新引渡偏移;
[0386]具体地,更新后的引渡偏移=当前引渡偏移+用户数据的长度+1 ;
[0387]例如,当前引渡偏移为38,用户数据的长度为4,则更新引渡偏移为43 ;
[0388]步骤d25:卡片根据引渡偏移和第四数据的长度判断引渡命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤d26 ;
[0389]具体地,判断引渡偏移+第四数据的长度的值是否大于239,是则引渡命令缓冲区会越界,否则引渡命令缓冲区不会越界;
[0390]步骤d26:卡片将第四数据写到引渡命令缓冲区中偏移等于引渡偏移的位置;
[0391]本实施例中,步骤d26具体为:将引渡命令缓冲区中从偏移等于第十二偏移至偏移等于第十三偏移之前的数据写到引渡命令缓冲区中偏移等于引渡偏移的位置;
[0392]例如,当前引渡偏移为43,则将第四数据写到引渡命令缓冲区中偏移等于43的位置;
[0393]步骤d27:卡片根据第四数据的长度更新引渡偏移;
[0394]具体地,更新后的引渡偏移=当前引渡偏移+第四数据的长度;
[0395]例如,当前引渡偏移为43,第四数据的长度为18,则更新引渡偏移为61 ;
[0396]本实施例中,引渡收条数据具体为引渡命令缓冲区中,从偏移等于第十三偏移至偏移等于当前引渡偏移之前的数据,例如当前引渡偏移为61,第十三偏移为35,则引渡收条数据具体为弓I渡命令缓冲区中的第三十五个字节至第六十个字节。
[0397]步骤141:卡片使用预设算法对引渡收条数据进行签名运算,得到第四签名数据;
[0398]本实施例中,预设算法具体为ALG_DES_MAC8_IS09797_1_M2_ALG3算法。
[0399]步骤142:卡片根据第四签名数据和引渡收条数据组织引渡收条;
[0400]本实施例中,步骤142具体包括:
[0401]步骤d28:卡片记录当前引渡偏移为第十四偏移;
[0402]步骤d29:卡片根据第十一偏移更新引渡偏移;
[0403]本实施例中,更新后的引渡偏移=第i^一偏移+1 ;
[0404]例如,第十一偏移等于5,则更新引渡偏移为6 ;
[0405]步骤d30:卡片将第四签名数据的长度写到引渡命令缓冲区中偏移等于引渡偏移的位置,将第四签名数据写到引渡命令缓冲区中引渡偏移加I的位置;
[0406]例如,当前引渡偏移为6,则将第四签名数据的长度写到引渡命令缓冲区中偏移等于6的位置,将第四签名数据写到引渡命令缓冲区中偏移等于7的位置;
[0407]步骤d31:卡片根据第四签名数据的长度更新引渡偏移;
[0408]具体地,更新后的引渡偏移=当前引渡偏移+第四签名数据的长度+1 ;
[0409]例如,当前引渡偏移为6,第四签名数据的长度为8,则更新引渡偏移为15;
[0410]步骤d32:卡片根据引渡偏移和引渡收条数据的长度判断引渡命令缓冲区是否会越界,是则卡片抛出异常,向上位机返回异常状态码,否则执行步骤d33 ;
[0411]具体地,判断引渡偏移+引渡收条数据的长度的值是否大于239,是则引渡命令缓冲区会越界,否则引渡命令缓冲区不会越界;
[0412]步骤d33:卡片将引渡收条数据写到引渡命令缓冲区中偏移等于引渡偏移的位置;
[0413]本实施例中,步骤d33具体为,将引渡命令缓冲区中,从偏移等于第十三偏移至偏移等于第十四偏移之前的数据写到引渡命令缓冲区中偏移等于引渡偏移的位置;
[0414]例如,当前引渡偏移为15,则将引渡收条数据写到引渡命令缓冲区中偏移等于15的位置;
[0415]步骤d34:卡片根据引渡收条数据的长度更新引渡偏移;
[0416]具体地,更新后的引渡偏移=当前引渡偏移+引渡收条数据的长度;
[0417]例如,当前引渡偏移为15,引渡收条数据的长度为26,则更新引渡偏移为41 ;
[0418]步骤d35:卡片计算引渡收条中的数据的长度;
[0419]本实施例中,引渡收条为长度+数据的格式,弓丨渡收条中的数据具体为弓I渡命令缓冲区中从偏移等于第i^一偏移之后至偏移等于当前引渡偏移之前的数据,引渡收条中的数据的长度=当前引渡偏移-第十一偏移-1 ;
[0420]例如,第^^一偏移为5,当前引渡偏移为41,则引渡收条中的数据的长度为35。
[0421]步骤d36:卡片将引渡收条中的数据的长度写到引渡命令缓冲区中偏移等于第十一偏移的位置。
[0422]例如,第十一偏移为5,则将引渡收条中的数据的长度写到引渡命令缓冲区中偏移等于5的位置。
[0423]步骤143:卡片向上位机返回引渡收条,并更新卡内确认计数器的计数值;
[0424]本实施例中,引渡收条具体为引渡命令缓冲区中,从偏移等于第十一偏移开始至偏移等于当前引渡偏移之前的数据;
[0425]具体地,更新卡内确认计数器的计数值为其当前值加I。
[0426]步骤144:上位机接收卡片返回的收条,对接收到的收条进行验证,若验证通过,则上位机判定卡片内容管理操作执行成功,若验证未通过,则上位机判定卡片内容管理操作执行失败。
[0427]具体地,步骤144包括:上位机接收卡片返回的收条;当接收到的是加载收条时,上位机对加载收条进行验证,若验证通过,则判定加载操作成功,若验证未通过,则判定加载操作失败,当接收到的是安装收条时,上位机对安装收条进行验证,若验证通过,则判定安装操作成功,若验证未通过,则判定安装操作失败,当接收到的是删除收条时,上位机对删除收条进行验证,若验证通过,则判定删除操作成功,若验证未通过,则判定删除操作失败,当接收到的是引渡收条时,上位机对引渡收条进行验证,若验证通过,则判定引渡操作成功,若验证未通过,则判定引渡操作失败;
[0428]本实施例中,上位机根据接收到卡片返回的收条之前向卡片发送的指令的类型来确定收条的类型,若接收到卡片返回的收条之前向卡片发送的是加载命令,则确定接收到的收条为加载收条,若接收到卡片返回的收条之前向卡片发送的是安装命令,则确定接收到的收条为安装收条,若接收到的卡片返回的收条之前向卡片发送的是删除命令,则确定接收到的收条是删除收条,若接收到的卡片返回的收条之前向卡片发送的是引渡命令,则确定接收到的收条是引渡收条;
[0429]上位机对加载收条进行验证的方法为:采用与卡片计算加载收条相同的方法计算一个收条,判断计算得到的收条与接收到的加载收条是否一致,是则验证通过,否则验证未通过;
[0430]上位机对安装收条进行验证的方法为:采用与卡片计算安装收条相同的方法计算一个收条,判断计算得到的收条与接收到的安装收条是否一致,是则验证通过,否则验证未通过;
[0431]上位机对删除收条进行验证的方法为:采用与卡片计算删除收条相同的方法计算一个收条,判断计算得到的收条与接收到的删除收条是否一致,是则验证通过,否则验证未通过;
[0432]上位机对引渡收条进行验证的方法为:采用与卡片计算引渡收条相同的方法计算一个收条,判断计算得到的收条与接收到的引渡收条是否一致,是则验证通过,否则验证未通过。
[0433]实施例2
[0434]本发明实施例2提供一种收条验证系统,参见图3,所述系统包括卡片2和上位机
4。其中,卡片2具体包括:
[0435]存储模块201,用于存储加载文件标识、安全域标识、安全域标识的索引和用户数据。
[0436]接收模块202,用于接收上位机4发送的APDU数据。
[0437]解析模块203,用于对接收模块202接收到的APDU数据进行解析,以及判断APDU数据的类型。
[0438]第一获取模块204,用于当解析模块203判定APDU数据为预加载命令时,获取预加载命令中的加载文件标识和安全域标识,将从预加载命令中获取到的加载文件标识存储到存储模块201中,确定从预加载命令中获取的安全域标识在卡内的索引,以及将确定的安全域标识在卡内的索引存储到存储模块201中。
[0439]加载收条组织模块205,用于当解析模块203判定APDU数据为加载命令时组织加载收条;
[0440]参见图4,加载收条组织模块205,具体包括:
[0441]第一获取单元2051,用于获取存储模块201中存储的加载文件标识和安全域标识的索引;
[0442]第一查找单元2052,用于根据第一获取单元2051获取到的安全域标识的索引在存储模块201中查找相应的安全域标识;
[0443]第一数据组织单元2053,用于根据第一获取单元2051获取到的加载文件标识和第一查找单元2052查找到的安全域标识组织第一数据;
[0444]第二获取单元2054,用于获取确认计数器的计数值,以及获取存储模块201中存储的用户数据;
[0445]加载收条数据组织单元2055,用于当第二获取单元2054获取到的确认计数器的计数值未达到阈值,且第二获取单元2054获取到的用户数据不为空时,根据确认计数器的计数值、用户数据以及第一数据组织单元2053组织得到的第一数据组织加载收条数据;
[0446]第一签名单元2056,用于对加载收条数据组织单元2055组织得到的加载收条数据进行签名,得到第一签名数据;
[0447]加载收条组织单元2057,用于根据第一签名单元2056得到的第一签名数据和加载收条数据组织单元2055组织得到的加载收条数据组织加载收条。
[0448]进一步地,加载收条组织模块205还包括:第一创建单元2058 ;
[0449]第一创建单元2058,用于创建加载命令缓冲区,以及存储加载命令到加载命令缓冲区;
[0450]相应地,第一数据组织单元2053,具体用于:
[0451]初始化加载命令缓冲区的偏移为加载偏移,更新加载偏移等于加载命令缓冲区中的加载命令的数据域的起始位置的偏移,并记录当前加载偏移为第一偏移;
[0452]调用预设函数将获取到的加载文件标识写到加载命令缓冲区中偏移等于加载偏移加I的位置,并将预设函数的返回值写到加载命令缓冲区中偏移等于加载偏移的位置;
[0453]更新加载偏移为其当前值加上加载文件标识的长度再加1,调用预设函数将查找到的安全域标识写到加载命令缓冲区中偏移等于加载偏移加I的位置,并将预设函数的返回值写到加载命令缓冲区中偏移等于加载偏移的位置;
[0454]更新加载偏移的长度为其当前值加上安全域标识的长度再加I ;
[0455]第一数据具体为加载命令缓冲区中偏移等于第一偏移至当前加载偏移之间的数据;
[0456]加载收条数据组织单元2055,具体用于,当第二获取单元2054获取到的确认计数器的计数值未达到阈值,且第二获取单元2054获取到的用户数据不为空时:
[0457]记录当前加载偏移为第二偏移,将确认计数器的计数值的长度写到加载命令缓冲区中偏移等于加载偏移的位置,将确认计数器的计数值写到加载命令缓冲区中偏移等于加载偏移加I的位置;
[0458]更新加载偏移为其当前值加上确认计数器的计数值的长度再加1,将用户数据的长度写到加载命令缓冲区中偏移等于加载偏移的位置,将用户数据写到加载命令缓冲区中偏移等于加载偏移加I的位置;
[0459]更新加载偏移为其当前值加上用户数据的长度再加1,将第一数据写到加载命令缓冲区中偏移等于加载偏移的位置;
[0460]更新加载偏移为其当前值加上第一数据的长度;
[0461]加载收条数据具体为加载命令缓冲区中偏移等于第二偏移至当前加载偏移之间的数据;
[0462]加载收条组织单元2057,具体用于:
[0463]记录当前加载偏移为第三偏移,更新加载偏移等于第一偏移加1,将第一签名数据的长度写到加载命令缓冲区中偏移等于加载偏移的位置,将第一签名数据写到加载命令缓冲区中偏移等于加载偏移加I的位置;
[0464]更新加载偏移为其当前值加上第一签名数据的长度再加1,将加载收条数据写到加载命令缓冲区中偏移等于加载偏移的位置;
[0465]更新加载偏移为其当前值加上加载收条数据的长度,计算加载收条中数据的长度,将计算结果写到加载命令缓冲区中偏移等于第一偏移的位置;
[0466]加载收条具体为加载命令缓冲区中偏移等于第一偏移至加载偏移之间的数据。
[0467]安装收条组织模块206,用于当解析模块203判定APDU数据为安装命令时组织安装收条;
[0468]参见图5,安装收条组织模块206,具体包括:
[0469]第二数据组织单元2061,用于根据安装命令中的可执行加载文件标识和应用标识组织第二数据;
[0470]第三获取单元2062,用于获取确认计数器的计数值,以及获取存储模块201中存储的用户数据;
[0471]安装收条数据组织单元2063,用于当第三获取单元2062获取到的确认计数器的计数值未达到阈值,且第三获取单元2062获取到的用户数据不为空时,根据确认计数器的计数值、用户数据以及第二数据组织单元2061组织得到的第二数据组织安装收条数据;
[0472]第二签名单元2064,用于对安装收条数据组织单元2063组织得到的安装收条数据进行签名,得到第二签名数据;
[0473]安装收条组织单元2065,用于根据第二签名单元2064得到的第二签名数据和安装收条数据组织单元2063组织得到的安装收条数据组织安装收条。
[0474]安装收条组织模块206还包括第二创建单元2066 ;
[0475]第二创建单元2066,用于创建安装命令缓冲区,以及存储安装命令到安装命令缓冲区;
[0476]相应地,第二数据组织单元2061,具体用于:
[0477]初始化安装命令缓冲区的偏移为安装偏移,更新安装偏移等于安装命令缓冲区中的安装命令的数据域的起始位置的偏移,并记录当前安装偏移为第四偏移,读取安装命令缓冲区中偏移等于安装偏移的位置的数据,得到可执行加载文件标识的长度;
[0478]更新安装偏移为其当前值加1,读取安装命令缓冲区中从偏移等于安装偏移的位置开始,长度等于可执行加载文件标识的长度的数据,得到可执行加载文件标识;
[0479]更新安装偏移为其当前值加上可执行加载文件标识的长度,记录当前安装偏移为第五偏移,读取安装命令缓冲区中偏移等于安装偏移的位置的数据,得到可执行模块标识的长度;
[0480]更新安装偏移为其当前值加1,读取安装命令缓冲区中从偏移等于安装偏移的位置开始,长度等于可执行模块标识的长度的数据,得到可执行模块标识;
[0481]更新安装偏移为其当前值加上可执行模块标识的长度,读取安装命令缓冲区中偏移等于安装偏移的位置的数据,得到安装应用标识的长度;
[0482]更新安装偏移为其当前值加1,读取安装命令缓冲区中从偏移等于安装偏移的位置开始,长度等于安装应用标识的长度的数据,得到安装应用标识;
[0483]更新安装偏移等于第五偏移,将安装应用标识的长度写到安装命令缓冲区中偏移等于安装偏移的位置;
[0484]更新安装偏移为其当前值加1,将安装应用标识写到安装命令缓冲区中偏移等于安装偏移的位置;
[0485]更新安装偏移为其当前值加上安装应用标识的长度;
[0486]第二数据具体为安装命令缓冲区中偏移等于第四偏移至安装偏移之间的数据;
[0487]安装收条数据组织单元2063,具体用于,当第三获取单元2062获取到的确认计数器的计数值未达到阈值,且第三获取单元2062获取到的用户数据不为空时:
[0488]记录当前安装偏移为第六偏移,将确认计数器的计数值的长度写到安装命令缓冲区中偏移等于安装偏移的位置,将确认计数器的计数值写到安装命令缓冲区中偏移等于安装偏移加I的位置;
[0489]更新安装偏移为其当前值加上确认计数器的计数值的长度再加1,将用户数据的长度写到安装命令缓冲区中偏移等于安装偏移的位置,将用户数据写到安装命令缓冲区中偏移等于安装偏移加I的位置;
[0490]更新安装偏移为其当前值加上用户数据的长度再加1,将第二数据写到安装命令缓冲区中偏移等于安装偏移的位置;
[0491]更新安装偏移为其当前值加上第二数据的长度;
[0492]安装收条数据具体为安装命令缓冲区中偏移等于第六偏移至安装偏移之间的数据;
[0493]安装收条组织单元2065,具体用于:
[0494]记录当前安装偏移为第七偏移,更新安装偏移等于第四偏移加1,将第二签名数据的长度写到安装命令缓冲区中偏移等于安装偏移的位置,将第二签名数据写到安装命令缓冲区中偏移等于安装偏移加I的位置;
[0495]更新安装偏移为其当前值加上第二签名数据的长度再加1,将安装收条数据写到安装命令缓冲区中偏移等于安装偏移的位置;
[0496]更新安装偏移为其当前值加上安装收条数据的长度,计算安装收条中数据的长度,将计算结果写到安装命令缓冲区中偏移等于第四偏移的位置;
[0497]安装收条具体为安装命令缓冲区中偏移等于第四偏移至安装偏移之间的数据。
[0498]删除收条组织模块207,用于当解析模块203判定APDU数据为删除命令时组织删除收条;
[0499]参见图6,删除收条组织模块207,具体包括:
[0500]第三数据组织单元2071,用于根据删除命令中的应用标识组织第三数据;
[0501]第四获取单元2072,用于获取确认计数器的计数值,以及获取存储模块201中存储的用户数据;
[0502]删除收条数据组织单元2073,用于当第四获取单元2072获取到的确认计数器的计数值未达到阈值,且第四获取单元2072获取到的用户数据不为空时,根据确认计数器的计数值、用户数据以及第三数据组织单元2071组织得到的第三数据组织删除收条数据;
[0503]第三签名单元2074,用于对删除收条数据组织单元2073组织得到的删除收条数据进行签名,得到第三签名数据;
[0504]删除收条组织单元2075,用于根据第三签名单元2074得到的第三签名数据和删除收条数据组织单元2073组织得到的删除收条数据组织删除收条。
[0505]进一步地,删除收条组织模块207还包括第三创建单元2076 ;
[0506]第三创建单元2076,用于创建删除命令缓冲区,存储删除命令到删除命令缓冲区;
[0507]第三数据组织单元2071,具体用于:
[0508]初始化删除命令缓冲区的偏移为删除偏移,更新删除偏移等于删除命令缓冲区中的删除命令的数据域的起始位置的偏移,并记录当前删除偏移为第八偏移,读取删除命令缓冲区中偏移等于删除偏移的位置的数据,得到删除应用标识的长度;
[0509]更新删除偏移为其当前值加1,读取删除命令缓冲区中从偏移等于删除偏移的位置开始,长度等于删除应用标识的长度的数据,得到删除应用标识;
[0510]更新删除偏移为其当前值加上删除应用标识的长度;
[0511]第三数据具体为删除命令缓冲区中偏移等于第八偏移至删除偏移之间的数据;
[0512]删除收条数据组织单元2075,具体用于,当第四获取单元2072获取到的确认计数器的计数值未达到阈值,且第四获取单元2072获取到的用户数据不为空时:
[0513]记录当前删除偏移为第九偏移,将确认计数器的计数值的长度写到删除命令缓冲区中偏移等于删除偏移的位置,将确认计数器的计数值写到删除命令缓冲区中偏移等于删除偏移加I的位置;
[0514]更新删除偏移为其当前值加上确认计数器的计数值的长度再加1,将用户数据的长度写到删除命令缓冲区中偏移等于删除偏移的位置,将用户数据写到删除命令缓冲区中偏移等于删除偏移加I的位置;
[0515]更新删除偏移为其当前值加上用户数据的长度再加1,将第三数据写到删除命令缓冲区中偏移等于删除偏移的位置;
[0516]更新删除偏移为其当前值加上第三数据的长度;
[0517]删除收条数据具体为删除命令缓冲区中偏移等于第九偏移至删除偏移之间的数据;
[0518]删除收条组织单元2075,具体用于:
[0519]记录当前删除偏移为第十偏移,更新删除偏移等于第八偏移加1,将第三签名数据的长度写到删除命令缓冲区中偏移等于删除偏移的位置,将第三签名数据写到删除命令缓冲区中偏移等于删除偏移加I的位置;
[0520]更新删除偏移为其当前值加上第三签名数据的长度再加1,将删除收条数据写到删除命令缓冲区中偏移等于删除偏移的位置;
[0521]更新删除偏移为其当前值加上删除收条数据的长度,计算删除收条中数据的长度,将计算结果写到删除命令缓冲区中偏移等于第八偏移的位置;
[0522]删除收条具体为删除命令缓冲区中偏移等于第八偏移至删除偏移之间的数据。
[0523]引渡收条组织模块208,用于当解析模块203判定APDU数据为引渡命令时组织引渡收条;
[0524]参见图7,引渡收条组织模块208,具体包括:
[0525]第二查找单元2081,用于在存储模块201中查找与引渡命令中的应用标识相对应的应用的原安全域标识;
[0526]第四数据组织单元2082,用于根据第二查找单元2081查找到的原安全域标识,以及引渡命令中的应用标识和新安全域标识,组织第四数据;
[0527]第五获取单元2083,用于获取确认计数器的计数值,以及获取存储模块201中存储的用户数据;
[0528]引渡收条数据组织单元2084,用于当第五获取单元2083获取到的确认计数器的计数值未达到阈值,且第五获取单元2083获取到的用户数据不为空时,根据确认计数器的计数值、用户数据以及第四数据组织单元2082组织得到的第四数据组织引渡收条数据;
[0529]第四签名单元2085,用于对引渡收条数据组织单元2084组织得到的引渡收条数据进行签名,得到第四签名数据;
[0530]引渡收条组织单元2086,用于根据第四签名单元2085得到的第四签名数据和引渡收条数据组织单元2084组织得到的引渡收条数据组织引渡收条。
[0531]进一步地,引渡收条组织模块208还包括:第四创建单元2087 ;
[0532]第四创建单元2087,用于创建引渡命令缓冲区,存储引渡命令到引渡命令缓冲区;
[0533]第二查找单元2081,具体用于:
[0534]初始化引渡命令缓冲区的偏移为引渡偏移,更新引渡偏移等于引渡命令缓冲区中的引渡命令的数据域的起始位置的偏移,并记录当前引渡偏移为第十一偏移,读取引渡命令缓冲区中偏移等于引渡偏移的位置的数据,得到新安全域标识的长度;
[0535]更新引渡偏移为其当前值加1,读取引渡命令缓冲区中从偏移等于引渡偏移的位置开始,长度等于新安全域标识的长度的数据,得到新安全域标识;
[0536]更新引渡偏移为其当前值加上新安全域标识的长度,读取引渡命令缓冲区中偏移等于引渡偏移的位置的数据,得到引渡应用标识的长度;
[0537]更新引渡偏移为其当前值加1,读取引渡命令缓冲区中从偏移等于引渡偏移的位置开始,长度等于引渡应用标识的长度的数据,得到引渡应用标识,更新引渡偏移为其当前值加上引渡应用标识的长度;
[0538]在存储模块中查找与引渡应用标识对应的应用的原安全域标识;
[0539]第四数据组织单元2082,具体用于:
[0540]记录当前引渡偏移为第十二偏移,将原安全域标识的长度写到引渡命令缓冲区中偏移等于引渡偏移的位置,将原安全域标识写到引渡命令缓冲区中偏移等于引渡偏移加I的位置;
[0541]更新引渡偏移为其当前值加上原安全域标识的长度再加1,将引渡应用标识的长度写到引渡命令缓冲区中偏移等于引渡偏移的位置,将引渡应用标识写到引渡命令缓冲区中偏移等于引渡偏移加I的位置;
[0542]更新引渡偏移为其当前值加上引渡应用标识的长度再加1,将新安全域标识的长度写到引渡命令缓冲区中偏移等于引渡偏移的位置,将新安全域标识写到引渡命令缓冲区中偏移等于引渡偏移加I的位置,更新引渡偏移为其当前值加上新安全域标识的长度再加I;
[0543]第四数据具体为引渡命令缓冲区中偏移等于第十二偏移至引渡偏移之间的数据;
[0544]引渡收条数据组织单元2084,具体用于,当第五获取单元2083获取到的确认计数器的计数值未达到阈值,且第五获取单元2083获取到的用户数据不为空时:
[0545]记录当前引渡偏移为第十三偏移,将确认计数器的计数值的长度写到引渡命令缓冲区中偏移等于引渡偏移的位置,将确认计数器的计数值写到引渡命令缓冲区中偏移等于引渡偏移加I的位置;
[0546]更新引渡偏移为其当前值加上确认计数器的计数值的长度再加1,将用户数据的长度写到引渡命令缓冲区中偏移等于引渡偏移的位置,将用户数据写到引渡命令缓冲区中偏移等于引渡偏移加I的位置;
[0547]更新引渡偏移为其当前值加上用户数据的长度再加1,将第四数据写到引渡命令缓冲区中偏移等于引渡偏移的位置,更新引渡偏移为其当前值加上第四数据的长度;
[0548]引渡收条数据具体为引渡命令缓冲区中偏移等于第十三偏移至引渡偏移之间的数据;
[0549]引渡收条组织单元2086,具体用于:
[0550]记录当前引渡偏移为第十四偏移,更新引渡偏移等于第十一偏移加1,将签名数据的长度写到引渡命令缓冲区中偏移等于引渡偏移的位置,将签名数据写到引渡命令缓冲区中偏移等于引渡偏移加I的位置;
[0551]更新引渡偏移为其当前值加上签名数据的长度再加1,将引渡收条数据写到引渡命令缓冲区中偏移等于引渡偏移的位置;
[0552]更新引渡偏移为其当前值加上引渡收条数据的长度,计算引渡收条中数据的长度,将计算结果写到引渡命令缓冲区中偏移等于第十一偏移的位置;
[0553]引渡收条具体为引渡命令缓冲区中偏移等于第十一偏移至引渡偏移之间的数据。
[0554]发送模块209,用于向上位机4返回加载收条组织模块205组织得到的加载收条,向上位机4返回安装收条组织模块206组织得到的安装收条,向上位机4返回删除收条组织模块207组织得到的删除收条,向上位机4返回引渡收条组织模块208组织得到的引渡收条,以及向上位机4返回预设状态码和异常状态码。
[0555]更新模块210,用于更新卡片内的确认计数器的计数值。
[0556]进一步地,卡片2还可以包括第二获取模块211:
[0557]第二获取模块211,用于当解析模块203判定APDU数据为用户数据命令时获取用户数据命令中的用户数据,存储到存储模块201中。
[0558]上位机4具体包括:
[0559]通信模块401,用于向卡片2发送APDU数据,以及用于接收卡片2返回的收条;
[0560]验证模块402,用于对通信模块401接收到的收条进行验证。
[0561]以上所述的实施例只是本发明较优选的【具体实施方式】,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
【权利要求】
1.一种收条验证系统,包括卡片和上位机,其特征在于,所述卡片包括: 存储模块,用于存储加载文件标识、安全域标识、安全域标识的索引和用户数据; 接收模块,用于接收上位机发送的APDU数据; 解析模块,用于对所述接收模块接收到的APDU数据进行解析,以及判断所述APDU数据的类型; 第一获取模块,用于当所述解析模块判定所述APDU数据为预加载命令时,获取所述预加载命令中的加载文件标识和安全域标识,将从所述预加载命令中获取到的加载文件标识存储到所述存储模块中,确定从所述预加载命令中获取的安全域标识在卡内的索引,以及将确定的安全域标识的索引存储到所述存储模块中; 加载收条组织模块,用于当所述解析模块判定所述APDU数据为加载命令时组织加载收条; 安装收条组织模块,用于当所述解析模块判定所述APDU数据为安装命令时组织安装收条; 删除收条组织模块,用于当所述解析模块判定所述APDU数据为删除命令时组织删除收条; 引渡收条组织模块,用于当所述解析模块判定所述APDU数据为引渡命令时组织引渡收条; 发送模块,用于向所述上位机返回所述加载收条组织模块组织得到的加载收条,向所述上位机返回所述安装收条组织模块组织得到的安装收条,向所述上位机返回所述删除收条组织模块组织得到的删除收条,向所述上位机返回所述引渡收条组织模块组织得到的引渡收条,以及向所述上位机返回预设状态码和异常状态码; 更新模块,用于更新所述卡片内的确认计数器的计数值; 其中,所述加载收条组织模块具体包括: 第一获取单元,用于获取所述存储模块中存储的加载文件标识和安全域标识的索引;第一查找单元,用于根据所述第一获取单元获取到的安全域标识的索引在所述存储模块中查找相应的安全域标识; 第一数据组织单元,用于根据所述第一获取单元获取到的加载文件标识和所述第一查找单元查找到的安全域标识组织第一数据; 第二获取单元,用于获取所述确认计数器的计数值,以及获取所述存储模块中存储的用户数据; 加载收条数据组织单元,用于当所述第二获取单元获取到的确认计数器的计数值未达到阈值,且所述第二获取单元获取到的用户数据不为空时,根据所述确认计数器的计数值、所述用户数据以及所述第一数据组织单元组织得到的第一数据组织加载收条数据; 第一签名单元,用于对所述加载收条数据组织单元组织得到的加载收条数据进行签名,得到第一签名数据; 加载收条组织单元,用于根据所述第一签名单元得到的第一签名数据和所述加载收条数据组织单元组织得到的加载收条数据组织加载收条; 所述安装收条组织模块具体包括: 第二数据组织单元,用于根据所述安装命令中的可执行加载文件标识和应用标识组织第二数据; 第三获取单元,用于获取所述确认计数器的计数值,以及获取所述存储模块中存储的用户数据; 安装收条数据组织单元,用于当所述第三获取单元获取到的确认计数器的计数值未达到阈值,且所述第三获取单元获取到的用户数据不为空时,根据所述确认计数器的计数值、所述用户数据以及所述第二数据组织单元组织得到的第二数据组织安装收条数据; 第二签名单元,用于对所述安装收条数据组织单元组织得到的安装收条数据进行签名,得到第二签名数据; 安装收条组织单元,用于根据所述第二签名单元得到的第二签名数据和所述安装收条数据组织单元组织得到的安装收条数据组织安装收条; 所述删除收条组织模块具体包括: 第三数据组织单元,用于根据所述删除命令中的应用标识组织第三数据; 第四获取单元,用于获取所述确认计数器的计数值,以及获取所述存储模块中存储的用户数据; 删除收条数据组织单元,用于当所述第四获取单元获取到的确认计数器的计数值未达到阈值,且所述第四获取单元获取到的用户数据不为空时,根据所述确认计数器的计数值、所述用户数据以及所述第三数据组织单元组织得到的第三数据组织删除收条数据; 第三签名单元,用于对所述删除收条数据组织单元组织得到的删除收条数据进行签名,得到第三签名数据; 删除收条组织单元,用于根据所述第三签名单元得到的第三签名数据和所述删除收条数据组织单元组织得到的删除收条数据组织删除收条; 所述引渡收条组织模块具体包括: 第二查找单元,用于在所述存储模块中查找与所述引渡命令中的应用标识相对应的应用的原安全域标识; 第四数据组织单元,用于根据所述第二查找单元查找到的原安全域标识,以及所述引渡命令中的应用标识和新安全域标识,组织第四数据; 第五获取单元,用于获取所述确认计数器的计数值,以及获取所述存储模块中存储的用户数据; 引渡收条数据组织单元,用于当所述第五获取单元获取到的确认计数器的计数值未达到阈值,且所述第五获取单元获取到的用户数据不为空时,根据所述确认计数器的计数值、所述用户数据以及所述第四数据组织单元组织得到的第四数据组织引渡收条数据; 第四签名单元,用于对所述引渡收条数据组织单元组织得到的引渡收条数据进行签名,得到第四签名数据; 引渡收条组织单元,用于根据所述第四签名单元得到的第四签名数据和所述引渡收条数据组织单元组织得到的引渡收条数据组织引渡收条; 所述上位机包括: 通信模块,用于接收所述卡片返回的收条; 验证模块,用于对所述通信模块接收到的收条进行验证。
2.根据权利要求1所述的系统,其特征在于,所述卡片还包括第二获取模块; 所述第二获取模块,用于当所述解析模块判定所述APDU数据为用户数据命令时获取所述用户数据命令中的用户数据,存储到所述存储模块中。
3.根据权利要求1所述的系统,其特征在于,所述加载收条组织模块还包括第一创建单元; 所述第一创建单元,用于创建加载命令缓冲区,以及存储所述加载命令到所述加载命令缓冲区; 所述第一数据组织单元,具体用于:初始化所述加载命令缓冲区的偏移为加载偏移,更新所述加载偏移等于所述加载命令缓冲区中的加载命令的数据域的起始位置的偏移,并记录当前所述加载偏移为第一偏移;调用预设函数将获取到的加载文件标识写到所述加载命令缓冲区中偏移等于所述加载偏移加I的位置,并将所述预设函数的返回值写到所述加载命令缓冲区中偏移等于所述加载偏移的位置; 更新所述加载偏移为其当前值加上所述加载文件标识的长度再加1,调用所述预设函数将查找到的安全域标识写到所述加载命令缓冲区中偏移等于所述加载偏移加I的位置,并将所述预设函数的返回值写到所述加载命令缓冲区中偏移等于所述加载偏移的位置;更新所述加载偏移的长度为其当前值加上所述安全域标识的长度再加I; 所述第一数据具体为所述加载命令缓冲区中偏移等于所述第一偏移至当前所述加载偏移之间的数据。
4.根据权利要求3所述的系统,其特征在于,所述加载收条数据组织单元,具体用于,当所述第二获取单元获取到的确认计数器的计数值未达到阈值,且所述第二获取单元获取到的用户数据不为空时: 记录当前所述加载偏移为第二偏移,将所述确认计数器的计数值的长度写到所述加载命令缓冲区中偏移等于所述加载偏移的位置,将所述确认计数器的计数值写到所述加载命令缓冲区中偏移等于所述加载偏移加I的位置; 更新所述加载偏移为其当前值加上所述确认计数器的计数值的长度再加1,将所述用户数据的长度写到所述加载命令缓冲区中偏移等于所述加载偏移的位置,将所述用户数据写到所述加载命令缓冲区中偏移等于所述加载偏移加I的位置; 更新所述加载偏移为其当前值加上所述用户数据的长度再加1,将所述第一数据写到所述加载命令缓冲区中偏移等于所述加载偏移的位置; 更新所述加载偏移为其当前值加上所述第一数据的长度; 所述加载收条数据具体为所述加载命令缓冲区中偏移等于所述第二偏移至当前所述加载偏移之间的数据。
5.根据权利要求4所述的系统,其特征在于,所述加载收条组织单元具体用于: 记录当前所述加载偏移为第三偏移,更新所述加载偏移等于所述第一偏移加1,将所述第一签名数据的长度写到所述加载命令缓冲区中偏移等于所述加载偏移的位置,将所述第一签名数据写到所述加载命令缓冲区中偏移等于所述加载偏移加I的位置; 更新所述加载偏移为其当前值加上所述第一签名数据的长度再加1,将所述加载收条数据写到所述加载命令缓冲区中偏移等于所述加载偏移的位置; 更新所述加载偏移为其当前值加上所述加载收条数据的长度,计算加载收条中数据的长度,将计算结果写到所述加载命令缓冲区中偏移等于所述第一偏移的位置; 所述加载收条具体为所述加载命令缓冲区中偏移等于所述第一偏移至所述加载偏移之间的数据。
6.根据权利要求1所述的系统,其特征在于,所述安装收条组织模块还包括第二创建单元; 所述第二创建单元,用于创建安装命令缓冲区,以及存储所述安装命令到所述安装命令缓冲区; 所述第二数据组织单元,具体用于: 初始化所述安装命令缓冲区的偏移为安装偏移,更新所述安装偏移等于所述安装命令缓冲区中的安装命令的数据域的起始位置的偏移,并记录当前所述安装偏移为第四偏移,读取所述安装命令缓冲区中偏移等于所述安装偏移的位置的数据,得到可执行加载文件标识的长度; 更新所述安装偏移为其当前值加1,读取所述安装命令缓冲区中从偏移等于所述安装偏移的位置开始,长度等于所述可执行加载文件标识的长度的数据,得到可执行加载文件标识; 更新所述安装偏移为其当前值加上所述可执行加载文件标识的长度,记录当前所述安装偏移为第五偏移,读取所述安装命令缓冲区中偏移等于所述安装偏移的位置的数据,得到可执行模块标识的长度; 更新所述安装偏移为其当前值加1,读取所述安装命令缓冲区中从偏移等于所述安装偏移的位置开始,长度等于所述可执行模块标识的长度的数据,得到可执行模块标识;更新所述安装偏移为其当前值加上所述可执行模块标识的长度,读取所述安装命令缓冲区中偏移等于所述安装偏移的位置的数据,得到安装应用标识的长度; 更新所述安装偏移为其当前值加1,读取所述安装命令缓冲区中从偏移等于所述安装偏移的位置开始,长度等于所述安装应用标识的长度的数据,得到安装应用标识; 更新所述安装偏移等于第五偏移,将所述安装应用标识的长度写到所述安装命令缓冲区中偏移等于所述安装偏移的位置; 更新所述安装偏移为其当前值加1,将所述安装应用标识写到所述安装命令缓冲区中偏移等于所述安装偏移的位置; 更新所述安装偏移为其当前值加上所述安装应用标识的长度; 所述第二数据具体为所述安装命令缓冲区中偏移等于第四偏移至所述安装偏移之间的数据。
7.根据权利要求6所述的系统,其特征在于,所述安装收条数据组织单元,具体用于,当所述第三获取单元获取到的确认计数器的计数值未达到阈值,且所述第三获取单元获取到的用户数据不为空时: 记录当前所述安装偏移为第六偏移,将所述确认计数器的计数值的长度写到所述安装命令缓冲区中偏移等于所述安装偏移的位置,将所述确认计数器的计数值写到所述安装命令缓冲区中偏移等于所述安装偏移加I的位置; 更新所述安装偏移为其当前值加上所述确认计数器的计数值的长度再加1,将所述用户数据的长度写到所述安装命令缓冲区中偏移等于所述安装偏移的位置,将所述用户数据写到所述安装命令缓冲区中偏移等于所述安装偏移加I的位置; 更新所述安装偏移为其当前值加上所述用户数据的长度再加1,将所述第二数据写到所述安装命令缓冲区中偏移等于所述安装偏移的位置; 更新所述安装偏移为其当前值加上所述第二数据的长度; 所述安装收条数据具体为所述安装命令缓冲区中偏移等于第六偏移至所述安装偏移之间的数据。
8.根据权利要求7所述的系统,其特征在于,所述安装收条组织单元,具体用于: 记录当前所述安装偏移为第七偏移,更新所述安装偏移等于所述第四偏移加1,将所述第二签名数据的长度写到所述安装命令缓冲区中偏移等于所述安装偏移的位置,将所述第二签名数据写到所述安装命令缓冲区中偏移等于所述安装偏移加I的位置; 更新所述安装偏移为其当前值加上所述第二签名数据的长度再加1,将所述安装收条数据写到所述安装命令缓冲区中偏移等于所述安装偏移的位置; 更新所述安装偏移为其当前值加上所述安装收条数据的长度,计算安装收条中数据的长度,将计算结果写到所述安装命令缓冲区中偏移等于所述第四偏移的位置; 所述安装收条具体为所述安装命令缓冲区中偏移等于所述第四偏移至所述安装偏移之间的数据。
9.根据权利要求1所述的系统,其特征在于,所述删除收条组织模块还包括第三创建单元; 所述第三创建单元,用于创建删除命令缓冲区,存储所述删除命令到所述删除命令缓冲区; 所述第三数据组织单元,具体用于: 初始化所述删除命令缓冲区的偏移为删除偏移,更新所述删除偏移等于所述删除命令缓冲区中的删除命令的数据域的起始位置的偏移,并记录当前所述删除偏移为第八偏移,读取所述删除命令缓冲区中偏移等于所述删除偏移的位置的数据,得到删除应用标识的长度; 更新所述删除偏移为其当前值加1,读取所述删除命令缓冲区中从偏移等于所述删除偏移的位置开始,长度等于所述删除应用标识的长度的数据,得到删除应用标识; 更新所述删除偏移为其当前值加上所述删除应用标识的长度; 所述第三数据具体为所述删除命令缓冲区中偏移等于第八偏移至所述删除偏移之间的数据。
10.根据权利要求9所述的系统,其特征在于,所述删除收条数据组织单元,具体用于,当所述第四获取单元获取到的确认计数器的计数值未达到阈值,且所述第四获取单元获取到的用户数据不为空时: 记录当前所述删除偏移为第九偏移,将所述确认计数器的计数值的长度写到所述删除命令缓冲区中偏移等于所述删除偏移的位置,将所述确认计数器的计数值写到所述删除命令缓冲区中偏移等于所述删除偏移加I的位置; 更新所述删除偏移为其当前值加上所述确认计数器的计数值的长度再加1,将所述用户数据的长度写到所述删除命令缓冲区中偏移等于所述删除偏移的位置,将所述用户数据写到所述删除命令缓冲区中偏移等于所述删除偏移加I的位置; 更新所述删除偏移为其当前值加上所述用户数据的长度再加1,将所述第三数据写到所述删除命令缓冲区中偏移等于所述删除偏移的位置; 更新所述删除偏移为其当前值加上所述第三数据的长度; 所述删除收条数据具体为所述删除命令缓冲区中偏移等于第九偏移至所述删除偏移之间的数据。
11.根据权利要求10所述的系统,其特征在于,所述删除收条组织单元,具体用于: 记录当前所述删除偏移为第十偏移,更新所述删除偏移等于所述第八偏移加1,将所述第三签名数据的长度写到所述删除命令缓冲区中偏移等于所述删除偏移的位置,将所述第三签名数据写到所述删除命令缓冲区中偏移等于所述删除偏移加I的位置; 更新所述删除偏移为其当前值加上所述第三签名数据的长度再加1,将所述删除收条数据写到所述删除命令缓冲区中偏移等于所述删除偏移的位置; 更新所述删除偏移为其当前值加上所述删除收条数据的长度,计算删除收条中数据的长度,将计算结果写到所述删除命令缓冲区中偏移等于所述第八偏移的位置; 所述删除收条具体为所述删除命令缓冲区中偏移等于所述第八偏移至所述删除偏移之间的数据。
12.根据权利要求1所述的系统,其特征在于,所述引渡收条组织模块还包括第四创建单元; 所述第四创建单元,用于创建引渡命令缓冲区,存储所述引渡命令到所述引渡命令缓冲区; 所述第二查找单元,具体用于: 初始化所述引渡命令缓冲区的偏移为引渡偏移,更新所述引渡偏移等于所述引渡命令缓冲区中的引渡命令的数据域的起始位置的偏移,并记录当前所述引渡偏移为第十一偏移,读取所述引渡命令缓冲区中偏移等于所述引渡偏移的位置的数据,得到新安全域标识的长度; 更新所述引渡偏移为其当前值加1,读取所述引渡命令缓冲区中从偏移等于所述引渡偏移的位置开始,长度等于所述新安全域标识的长度的数据,得到新安全域标识; 更新所述引渡偏移为其当前值加上所述新安全域标识的长度,读取所述引渡命令缓冲区中偏移等于所述引渡偏移的位置的数据,得到引渡应用标识的长度; 更新所述引渡偏移为其当前值加1,读取所述引渡命令缓冲区中从偏移等于所述引渡偏移的位置开始,长度等于所述引渡应用标识的长度的数据,得到引渡应用标识,更新所述引渡偏移为其当前值加上所述引渡应用标识的长度; 在所述存储模块中查找与所述引渡应用标识对应的应用的原安全域标识。
13.根据权利要求12所述的系统,其特征在于,所述第四数据组织单元,具体用于: 记录当前所述引渡偏移为第十二偏移,将所述原安全域标识的长度写到所述引渡命令缓冲区中偏移等于所述引渡偏移的位置,将所述原安全域标识写到所述引渡命令缓冲区中偏移等于所述引渡偏移加I的位置; 更新所述引渡偏移为其当前值加上所述原安全域标识的长度再加1,将所述引渡应用标识的长度写到所述引渡命令缓冲区中偏移等于所述引渡偏移的位置,将所述引渡应用标识写到所述引渡命令缓冲区中偏移等于所述引渡偏移加I的位置; 更新所述引渡偏移为其当前值加上所述引渡应用标识的长度再加1,将所述新安全域标识的长度写到所述引渡命令缓冲区中偏移等于所述引渡偏移的位置,将所述新安全域标识写到所述引渡命令缓冲区中偏移等于所述引渡偏移加I的位置,更新所述引渡偏移为其当前值加上所述新安全域标识的长度再加I; 所述第四数据具体为所述引渡命令缓冲区中偏移等于所述第十二偏移至所述引渡偏移之间的数据。
14.根据权利要求13所述的系统,其特征在于,所述引渡收条数据组织单元,具体用于,当所述第五获取单元获取到的确认计数器的计数值未达到阈值,且所述第五获取单元获取到的用户数据不为空时: 记录当前所述引渡偏移为第十三偏移,将所述确认计数器的计数值的长度写到所述引渡命令缓冲区中偏移等于所述引渡偏移的位置,将所述确认计数器的计数值写到所述引渡命令缓冲区中偏移等于所述引渡偏移加I的位置; 更新所述引渡偏移为其当前值加上所述确认计数器的计数值的长度再加1,将所述用户数据的长度写到所述引渡命令缓冲区中偏移等于所述引渡偏移的位置,将所述用户数据写到所述引渡命令缓冲区中偏移等于所述引渡偏移加I的位置; 更新所述引渡偏移为其当前值加上所述用户数据的长度再加1,将所述第四数据写到所述引渡命令缓冲区中偏移等于所述引渡偏移的位置,更新所述引渡偏移为其当前值加上所述第四数据的长度; 所述引渡收条数据具体为所述引渡命令缓冲区中偏移等于第十三偏移至所述引渡偏移之间的数据。
15.根据权利要求14所述的系统,其特征在于,所述引渡收条组织单元,具体用于: 记录当前所述引渡偏移为第十四偏移,更新所述引渡偏移等于所述第十一偏移加1,将所述签名数据的长度写到所述引渡命令缓冲区中偏移等于所述引渡偏移的位置,将所述签名数据写到所述引渡命令缓冲区中偏移等于所述引渡偏移加I的位置; 更新所述引渡偏移为其当前值加上所述签名数据的长度再加1,将所述引渡收条数据写到所述引渡命令缓冲区中偏移等于所述引渡偏移的位置; 更新所述引渡偏移为其当前值加上所述引渡收条数据的长度,计算引渡收条中数据的长度,将计算结果写到所述引渡命令缓冲区中偏移等于所述第十一偏移的位置; 所述引渡收条具体为所述引渡命令缓冲区中偏移等于所述第十一偏移至所述引渡偏移之间的数据。
16.一种收条验证方法,其特征在于,包括: 步骤A:卡片接收上位机发送的APDU数据,解析所述APDU数据,判断所述APDU数据的类型,若为预加载命令则执行步骤B,若为加载命令则执行步骤C,若为安装命令则执行步骤D,若为删除命令则执行步骤E,若为引渡命令则执行步骤F ; 步骤B:获取所述预加载命令中的加载文件标识和安全域标识,存储获取到的加载文件标识,确定并记录获取到的安全域标识在所述卡片内的索引,向所述上位机返回预设状态码; 步骤C:所述卡片获取所述卡片内最近存储的加载文件标识和安全域标识的索引,根据所述安全域标识的索引在所述卡片内查找安全域标识,根据获取到的加载文件标识和查找到的安全域标识组织第一数据,获取所述卡片内的确认计数器的计数值和用户数据,若所述确认计数器的计数值未达到阈值且所述用户数据不为空,则根据所述确认计数器的计数值、所述用户数据以及所述第一数据组织加载收条数据,对所述加载收条数据进行签名运算得到第一签名数据,根据所述第一签名数据和所述加载收条数据组织加载收条,向所述上位机返回所述加载收条,并更新所述确认计数器的计数值,执行步骤G,否则向所述上位机返回异常状态码; 步骤D:所述卡片根据所述安装命令中的可执行加载文件标识和应用标识组织第二数据,获取所述卡片内的确认计数器的计数值和用户数据,若所述确认计数器的计数值未达到所述阈值且所述用户数据不为空,则根据所述确认计数器的计数值、所述用户数据以及所述第二数据组织安装收条数据,对所述安装收条数据进行签名运算得到第二签名数据,根据所述第二签名数据和所述安装收条数据组织安装收条,向所述上位机返回所述安装收条,并更新所述确认计数器的计数值,执行步骤G,否则向所述上位机返回异常状态码; 步骤E:所述卡片根据所述删除命令中的应用标识组织第三数据,获取所述卡片内的确认计数器的计数值和用户数据,若所述确认计数器的计数值未达到所述阈值且所述用户数据不为空,则根据所述确认计数器的计数值、所述用户数据以及所述第三数据组织删除收条数据,对所述删除收条数据进行签名运算得到第三签名数据,根据所述第三签名数据和所述删除收条数据组织删除收条,向所述上位机返回所述删除收条,并更新所述确认计数器的计数值,执行步骤G,否则向所述上位机返回异常状态码; 步骤F:所述卡片根据所述引渡命令中的应用标识查找所述卡片内与所述应用标识对应的应用的原安全域标识,根据查找到的原安全域标识以及所述引渡命令中的应用标识和新安全域标识组织第四数据,获取所述卡片内的确认计数器的计数值和用户数据,若所述确认计数器的计数值未达到所述阈值且所述用户数据不为空,则根据所述确认计数器的计数值、所述用户数据以及所述第四数据组织引渡收条数据,对所述引渡收条数据进行签名运算得到第四签名数据,根据所述第四签名数据和所述引渡收条数据组织引渡收条,向所述上位机返回所述引渡收条,并更新所述确认计数器的计数值,执行步骤G,否则向所述上位机返回异常状态码; 步骤G:所述上位机接收所述卡片返回的收条,对接收到的收条进行验证,若验证通过,则判定相应地卡片内容管理操作执行成功,若验证失败,则判定相应地卡片内容管理操作执行失败。
17.根据权利要求16所述的方法,其特征在于,所述步骤A中还包括:若所述APDU数据为用户数据命令则获取所述命令中的用户数据并存储,向所述上位机返回所述预设状态码。
18.根据权利要求16所述的方法,其特征在于,所述卡片判断出所述APDU数据为加载命令时还包括:所述卡片创建加载命令缓冲区,存储所述加载命令到所述加载命令缓冲区; 所述卡片根据获取到的加载文件标识和查找到的安全域标识组织第一数据,具体包括: 步骤al:所述卡片初始化所述加载命令缓冲区的偏移为加载偏移,更新所述加载偏移等于所述加载命令缓冲区中的加载命令的数据域的起始位置的偏移,并记录当前所述加载偏移为第一偏移; 步骤a2:所述卡片调用预设函数将获取到的加载文件标识写到所述加载命令缓冲区中偏移等于所述加载偏移加I的位置,并将所述预设函数的返回值写到所述加载命令缓冲区中偏移等于所述加载偏移的位置; 步骤a3:所述卡片更新所述加载偏移为其当前值加上所述加载文件标识的长度再加1,调用所述预设函数将查找到的安全域标识写到所述加载命令缓冲区中偏移等于所述加载偏移加I的位置,并将所述预设函数的返回值写到所述加载命令缓冲区中偏移等于所述加载偏移的位置; 步骤a4:所述卡片更新所述加载偏移为其当前值加上所述安全域标识的长度再加I ; 所述第一数据具体为所述加载命令缓冲区中偏移等于所述第一偏移至当前所述加载偏移之间的数据。
19.根据权利要求18所述的方法,其特征在于,所述卡片根据所述确认计数器的计数值、所述用户数据以及所述第一数据组织加载收条数据,具体包括: 步骤bl:所述卡片记录当前所述加载偏移为第二偏移,将所述确认计数器的计数值的长度写到所述加载命令缓冲区中偏移等于所述加载偏移的位置,将所述确认计数器的计数值写到所述加载命令缓冲区中偏移等于所述加载偏移加I的位置; 步骤b2:所述卡片更新所述加载偏移为其当前值加上所述确认计数器的计数值的长度再加1,将所述用户数据的长度写到所述加载命令缓冲区中偏移等于所述加载偏移的位置,将所述用户数据写到所述加载命令缓冲区中偏移等于所述加载偏移加I的位置; 步骤b3:所述卡片更新所述加载偏移为其当前值加上所述用户数据的长度再加1,将所述第一数据写到所述加载命令缓冲区中偏移等于所述加载偏移的位置; 步骤b4:所述卡片更新所述加载偏移为其当前值加上所述第一数据的长度; 所述加载收条数据具体为所述加载命令缓冲区中偏移等于所述第二偏移至当前所述加载偏移之间的数据。
20.根据权利要求19所述的方法,其特征在于,所述卡片根据所述第一签名数据和所述加载收条数据组织加载收条,具体包括: 步骤Cl:所述卡片记录当前所述加载偏移为第三偏移,更新所述加载偏移等于所述第一偏移加1,将所述第一签名数据的长度写到所述加载命令缓冲区中偏移等于所述加载偏移的位置,将所述第一签名数据写到所述加载命令缓冲区中偏移等于所述加载偏移加I的位置; 步骤c2:所述卡片更新所述加载偏移为其当前值加上所述第一签名数据的长度再加1,将所述加载收条数据写到所述加载命令缓冲区中偏移等于所述加载偏移的位置; 步骤c3:所述卡片更新所述加载偏移为其当前值加上所述加载收条数据的长度,计算加载收条中数据的长度,将计算结果写到所述加载命令缓冲区中偏移等于所述第一偏移的位置; 所述加载收条具体为所述加载命令缓冲区中偏移等于所述第一偏移至所述加载偏移之间的数据。
21.根据权利要求16所述的方法,其特征在于,所述卡片判断出所述APDU数据为安装命令时还包括:所述卡片创建安装命令缓冲区,存储所述安装命令到所述安装命令缓冲区; 所述卡片根据所述安装命令中的可执行加载文件标识和应用标识组织第二数据,具体包括: 步骤dl:所述卡片初始化所述安装命令缓冲区的偏移为安装偏移,更新所述安装偏移等于所述安装命令缓冲区中的安装命令的数据域的起始位置的偏移,并记录当前所述安装偏移为第四偏移,读取所述安装命令缓冲区中偏移等于所述安装偏移的位置的数据,得到可执行加载文件标识的长度; 步骤d2:所述卡片更新所述安装偏移为其当前值加1,读取所述安装命令缓冲区中从偏移等于所述安装偏移的位置开始,长度等于所述可执行加载文件标识的长度的数据,得到可执行加载文件标识; 步骤d3:所述卡片更新所述安装偏移为其当前值加上所述可执行加载文件标识的长度,记录当前所述安装偏移为第五偏移,读取所述安装命令缓冲区中偏移等于所述安装偏移的位置的数据,得到可执行模块标识的长度; 步骤d4:所述卡片更新所述安装偏移为其当前值加1,读取所述安装命令缓冲区中从偏移等于所述安装偏移的位置开始,长度等于所述可执行模块标识的长度的数据,得到可执行模块标识; 步骤d5:所述卡片更新所述安装偏移为其当前值加上所述可执行模块标识的长度,读取所述安装命令缓冲区中偏移等于所述安装偏移的位置的数据,得到安装应用标识的长度; 步骤d6:所述卡片更新所述安装偏移为其当前值加1,读取所述安装命令缓冲区中从偏移等于所述安装偏移的位置开始,长度等于所述安装应用标识的长度的数据,得到安装应用标识; 步骤d7:所述卡片更新所述安装偏移等于第五偏移,将所述安装应用标识的长度写到所述安装命令缓冲区中偏移等于所述安装偏移的位置; 步骤d8:所述卡片更新所述安装偏移为其当前值加1,将所述安装应用标识写到所述安装命令缓冲区中偏移等于所述安装偏移的位置; 步骤d9:所述卡片更新所述安装偏移为其当前值加上所述安装应用标识的长度;所述第二数据具体为所述安装命令缓冲区中偏移等于第四偏移至所述安装偏移之间的数据。
22.根据权利要求21所述的方法,其特征在于,所述卡片根据所述确认计数器的计数值、所述用户数据以及所述第二数据组织安装收条数据,具体包括: 步骤el:所述卡片记录当前所述安装偏移为第六偏移,将所述确认计数器的计数值的长度写到所述安装命令缓冲区中偏移等于所述安装偏移的位置,将所述确认计数器的计数值写到所述安装命令缓冲区中偏移等于所述安装偏移加I的位置; 步骤e2:所述卡片更新所述安装偏移为其当前值加上所述确认计数器的计数值的长度再加1,将所述用户数据的长度写到所述安装命令缓冲区中偏移等于所述安装偏移的位置,将所述用户数据写到所述安装命令缓冲区中偏移等于所述安装偏移加I的位置; 步骤e3:所述卡片更新所述安装偏移为其当前值加上所述用户数据的长度再加1,将所述第二数据写到所述安装命令缓冲区中偏移等于所述安装偏移的位置; 步骤e4:所述卡片更新所述安装偏移为其当前值加上所述第二数据的长度; 所述安装收条数据具体为所述安装命令缓冲区中偏移等于第六偏移至所述安装偏移之间的数据。
23.根据权利要求22所述的方法,其特征在于,所述卡片根据所述第二签名数据和所述安装收条数据组织安装收条,具体包括: 步骤fl:所述卡片记录当前所述安装偏移为第七偏移,更新所述安装偏移等于所述第四偏移加1,将所述第二签名数据的长度写到所述安装命令缓冲区中偏移等于所述安装偏移的位置,将所述第二签名数据写到所述安装命令缓冲区中偏移等于所述安装偏移加I的位置; 步骤f2:所述卡片更新所述安装偏移为其当前值加上所述第二签名数据的长度再加1,将所述安装收条数据写到所述安装命令缓冲区中偏移等于所述安装偏移的位置; 步骤f3:所述卡片更新所述安装偏移为其当前值加上所述安装收条数据的长度,计算安装收条中数据的长度,将计算结果写到所述安装命令缓冲区中偏移等于所述第四偏移的位置; 所述安装收条具体为所述安装命令缓冲区中偏移等于所述第四偏移至所述安装偏移之间的数据。
24.根据权利要求16所述的方法,其特征在于,所述卡片判断出所述APDU数据为删除命令时还包括:所述卡片创建删除命令缓冲区,存储所述删除命令到所述删除命令缓冲区; 所述卡片根据所述删除命令中的应用标识组织第三数据,具体包括: 步骤gl:所述卡片初始化所述删除命令缓冲区的偏移为删除偏移,更新所述删除偏移等于所述删除命令缓冲区中的删除命令的数据域的起始位置的偏移,并记录当前所述删除偏移为第八偏移,读取所述删除命令缓冲区中偏移等于所述删除偏移的位置的数据,得到删除应用标识的长度; 步骤g2:所述卡片更新所述删除偏移为其当前值加1,读取所述删除命令缓冲区中从偏移等于所述删除偏移的位置开始,长度等于所述删除应用标识的长度的数据,得到删除应用标识; 步骤g3:所述卡片更新所述删除偏移为其当前值加上所述删除应用标识的长度;所述第三数据具体为所述删除命令缓冲区中偏移等于第八偏移至所述删除偏移之间的数据。
25.根据权利要求24所述的方法,其特征在于,所述卡片根据所述确认计数器的计数值、所述用户数据以及所述第三数据组织删除收条数据,具体包括: 步骤h1:所述卡片记录当前所述删除偏移为第九偏移,将所述确认计数器的计数值的长度写到所述删除命令缓冲区中偏移等于所述删除偏移的位置,将所述确认计数器的计数值写到所述删除命令缓冲区中偏移等于所述删除偏移加I的位置; 步骤h2:所述卡片更新所述删除偏移为其当前值加上所述确认计数器的计数值的长度再加1,将所述用户数据的长度写到所述删除命令缓冲区中偏移等于所述删除偏移的位置,将所述用户数据写到所述删除命令缓冲区中偏移等于所述删除偏移加I的位置; 步骤h3:所述卡片更新所述删除偏移为其当前值加上所述用户数据的长度再加1,将所述第三数据写到所述删除命令缓冲区中偏移等于所述删除偏移的位置; 步骤h4:所述卡片更新所述删除偏移为其当前值加上所述第三数据的长度; 所述删除收条数据具体为所述删除命令缓冲区中偏移等于第九偏移至所述删除偏移之间的数据。
26.根据权利要求25所述的方法,其特征在于,所述卡片根据所述第三签名数据和所述删除收条数据组织删除收条,具体包括: 步骤il:所述卡片记录当前所述删除偏移为第十偏移,更新所述删除偏移等于所述第八偏移加1,将所述第三签名数据的长度写到所述删除命令缓冲区中偏移等于所述删除偏移的位置,将所述第三签名数据写到所述删除命令缓冲区中偏移等于所述删除偏移加I的位置; 步骤i2:所述卡片更新所述删除偏移为其当前值加上所述第三签名数据的长度再加1,将所述删除收条数据写到所述删除命令缓冲区中偏移等于所述删除偏移的位置; 步骤i3:所述卡片更新所述删除偏移为其当前值加上所述删除收条数据的长度,计算删除收条中数据的长度,将计算结果写到所述删除命令缓冲区中偏移等于所述第八偏移的位置; 所述删除收条具体为所述删除命令缓冲区中偏移等于第八偏移至所述删除偏移之间的数据。
27.根据权利要求16所述的方法,其特征在于,所述卡片判断出所述APDU数据为引渡命令时还包括:所述卡片创建引渡命令缓冲区,存储所述引渡命令到所述引渡命令缓冲区; 所述获取原安全域标识具体包括: 步骤jl:所述卡片初始化所述引渡命令缓冲区的偏移为引渡偏移,更新所述引渡偏移等于所述引渡命令缓冲区中的引渡命令的数据域的起始位置的偏移,并记录当前所述引渡偏移为第十一偏移,读取所述引渡命令缓冲区中偏移等于所述引渡偏移的位置的数据,得到新安全域标识的长度; 步骤j2:所述卡片更新所述引渡偏移为其当前值加1,读取所述引渡命令缓冲区中从偏移等于所述引渡偏移的位置开始,长度等于所述新安全域标识的长度的数据,得到新安全域标识;步骤j3:所述卡片更新所述引渡偏移为其当前值加上所述新安全域标识的长度,读取所述引渡命令缓冲区中偏移等于所述引渡偏移的位置的数据,得到引渡应用标识的长度;步骤j4:所述卡片更新所述引渡偏移为其当前值加1,读取所述引渡命令缓冲区中从偏移等于所述引渡偏移的位置开始,长度等于所述引渡应用标识的长度的数据,得到引渡应用标识,更新所述引渡偏移为其当前值加上所述引渡应用标识的长度; 步骤j5:所述卡片在所述卡片内查找与所述引渡应用标识对应的应用的原安全域标识。
28.根据权利要求27所述的方法,其特征在于, 所述卡片根据查找到的原安全域标识以及所述引渡命令中的应用标识和新安全域标识组织第四数据,具体包括: 步骤kl:所述卡片记录当前所述引渡偏移为第十二偏移,将所述原安全域标识的长度写到所述引渡命令缓冲区中偏移等于所述引渡偏移的位置,将所述原安全域标识写到所述引渡命令缓冲区中偏移等于所述引渡偏移加I的位置; 步骤k2:所述卡片更新所述引渡偏移为其当前值加上所述原安全域标识的长度再加1,将所述引渡应用标识的长度写到所述引渡命令缓冲区中偏移等于所述引渡偏移的位置,将所述引渡应用标识写到所述引渡命令缓冲区中偏移等于所述引渡偏移加I的位置; 步骤k3:所述卡片更新所述引渡偏移为其当前值加上所述引渡应用标识的长度再加1,将所述新安全域标识的长度写到所述引渡命令缓冲区中偏移等于所述引渡偏移的位置,将所述新安全域标识写到所述引渡命令缓冲区中偏移等于所述引渡偏移加I的位置,更新所述引渡偏移为其当前值加上所述新安全域标识的长度再加I ; 所述第四数据具体为所述引渡命令缓冲区中偏移等于所述第十二偏移至所述引渡偏移之间的数据。
29.根据权利要求28所述的方法,其特征在于,所述卡片根据所述确认计数器的计数值、所述用户数据以及所述第四数据组织引渡收条数据,具体包括: 步骤11:所述卡片记录当前所述引渡偏移为第十三偏移,将所述确认计数器的计数值的长度写到所述引渡命令缓冲区中偏移等于所述引渡偏移的位置,将所述确认计数器的计数值写到所述引渡命令缓冲区中偏移等于所述引渡偏移加I的位置; 步骤12:所述卡片更新所述引渡偏移为其当前值加上所述确认计数器的计数值的长度再加1,将所述用户数据的长度写到所述引渡命令缓冲区中偏移等于所述引渡偏移的位置,将所述用户数据写到所述引渡命令缓冲区中偏移等于所述引渡偏移加I的位置; 步骤13:所述卡片更新所述引渡偏移为其当前值加上所述用户数据的长度再加1,将所述第四数据写到所述引渡命令缓冲区中偏移等于所述引渡偏移的位置,更新所述引渡偏移为其当前值加上所述第四数据的长度; 所述引渡收条数据具体为所述引渡命令缓冲区中偏移等于第十三偏移至所述引渡偏移之间的数据。
30.根据权利要求29所述的方法,其特征在于,所述卡片根据所述第四签名数据和所述引渡收条数据组织引渡收条,具体包括: 步骤ml:所述卡片记录当前所述引渡偏移为第十四偏移,更新所述引渡偏移等于所述第十一偏移加1,将所述签名数据的长度写到所述引渡命令缓冲区中偏移等于所述引渡偏移的位置,将所述签名数据写到所述引渡命令缓冲区中偏移等于所述引渡偏移加I的位置; 步骤m2:所述卡片更新所述引渡偏移为其当前值加上所述签名数据的长度再加1,将所述引渡收条数据写到所述引渡命令缓冲区中偏移等于所述引渡偏移的位置; 步骤m3:所述卡片更新所述引渡偏移为其当前值加上所述引渡收条数据的长度,计算引渡收条中数据的长度,将计算结果写到所述引渡命令缓冲区中偏移等于所述第十一偏移的位置; 所述引渡收条具体为所述引渡命令缓冲区中偏移等于所述第十一偏移至所述引渡偏移之间的数据。
【文档编号】G06F21/62GK104182699SQ201410421373
【公开日】2014年12月3日 申请日期:2014年8月25日 优先权日:2014年8月25日
【发明者】陆舟, 于华章 申请人:飞天诚信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1