一种复核签名的实现方法

文档序号:7823312阅读:307来源:国知局
一种复核签名的实现方法
【专利摘要】本发明公开一种复核签名的实现方法,该方法包括:中间件遍历报文找到第一预设字符、第二预设字符、第三预设字符、第四预设字符、第五预设字符,将解析得到的关键信息存储到第一显示缓存区中,然后将报文按照约定格式发送给下层COS;下层COS对接收到的报文按照与中间件相同的方式进行解析,并对解析结果进行签名操作,然后将解析得到的关键信息输出等待用户确认,用户确认后将签名结果返回给中间件进行验证。本发明中中间件与下层COS使用同样的解析方式,可使客户端显示的信息与USB Key显示的信息保持一致。
【专利说明】一种复核签名的实现方法

【技术领域】
[0001]本发明涉及信息安全领域,尤其涉及一种复核签名的实现方法。

【背景技术】
[0002]USB Key是为了保障交易过程的安全而应用产生,USB Key是一种USB接口的硬件设备,它内置单片机或智能卡芯片,有一定的存储空间,可以存储用户的私钥和数字证书,利用USB Key内置的公钥算法实现对用户身份的认证,在保证电子渠道安全方面发挥着巨大的作用。中间件是安装在客户端里的独立程序,COS是USB Key中的操作系统,在现有技术中,如果待签名数据的报文不符合某种标准格式,而中间件和COS的代码不一样时,就会出现中间件解析结果在主机客户端上所显示的信息和COS解析的结果在USB Key屏幕上显示的信息不一致的情况。


【发明内容】

[0003]本发明的目的是为了克服现有技术的不足,提供一种复核签名的实现方法。
[0004]本发明提供了一种复核签名的实现方法,包括:
[0005]步骤S1:当中间件接收到主机下发的报文时,判断所述报文是否为原文,是则将所述报文的第一个字节作为当前解析位置,执行步骤S2,否则根据所述报文按照第一约定格式生成第一签名指令,将所述第一签名指令发送给下层C0S,执行步骤S19 ;
[0006]步骤S2:所述中间件遍历所述报文中当前解析位置之后的每个字节数据,判断是否查找到第一预设字符,是则执行步骤S3,否则执行步骤S17 ;
[0007]步骤S3:所述中间件将所述第一预设字符所处字节作为当前解析位置,判断所述报文中当前解析位置的下一个字节数据是否为第二预设字符,是则执行步骤S4,否则执行步骤S17 ;
[0008]步骤S4:所述中间件将所述第二预设字符所处字节作为当前解析位置,获取所述报文中第一预设字符之前的数据并存储到第一显示缓存区中;
[0009]步骤S5:所述中间件记录所述第一显示缓存区中的数据的长度并存储到第一存储区中对应的位置,然后将所述第二预设字符顺序存储到所述第一显示缓存区中;
[0010]步骤S6:所述中间件判断所述报文中当前解析位置的下一个字节数据是否为第三预设字符,是则执行步骤S7,否则执行步骤S9 ;
[0011]步骤S7:所述中间件将所述第三预设字符所处字节作为当前解析位置,判断所述报文中当前解析位置的下一个字节数据是否为第四预设字符,是执行步骤S8,否则执行步骤 S17 ;
[0012]步骤S8:所述中间件根据所述第一显示缓存区中所述第二预设字符之后的字符,更新所述第一存储区,并在所述第一显示缓存区中存入设定数据,将所报文中的所述第四预设字符所处字节作为当前解析位置,返回步骤S2 ;
[0013]步骤S9:所述中间件判断所述报文中当前解析位置的下一个字节数据是否符合预设条件,是则执行步骤SI I,否则执行步骤SlO ;
[0014]步骤SlO:所述中间件将当前解析位置的下一个字节数据顺序存储到所述第一显示缓存区中,将下一字节数据所在位置作为当前解析位置,返回步骤S6 ;
[0015]步骤Sll:所述中间件更新所述第一存储区,将当前解析位置的下一字节数据所在位置作为当前解析位置并记录该解析位置,更新第一计数器;
[0016]步骤S12:所述中间件遍历所述报文中当前解析位置之后的每个字节数据,判断是否查找到第五预设字符,是执行步骤S13,否则执行步骤S16 ;
[0017]步骤S13:所述中间件判断所述第一存储区记录的所述报文中第二预设字符之后的相邻数据是否与所述第一计数器的值相匹配,是则执行步骤S14,否则执行步骤S15 ;
[0018]步骤S14:所述中间件将所述报文中当前解析位置与找到的下一个第五预设字符之间的数据存储到所述第一显示缓存区中的相应位置,更新所述第一计数器,更新所述第一结构体,返回步骤S12 ;
[0019]步骤S15:所述中间件更新所述第一计数器,将所述报文中的所述第五预设字符所在字节作为当前解析位置,返回步骤S12 ;
[0020]步骤S16:所述中间件判断所述报文是否为交易签名报文,是则执行步骤S18,否则执行步骤S17 ;
[0021]步骤S17:所述中间件对所述报文进行哈希计算,根据所述哈希结果按照第一约定格式生成第一签名指令,将所述第一签名指令发送给下层COS,执行步骤S19 ;
[0022]步骤S18:所述中间件根据所述报文按照第二约定格式生成第二签名指令,并将所述第二签名指令发送给下层COS,执行步骤S19 ;
[0023]步骤S19:所述中间件接收所述下层COS返回的数据,一并使用当前私钥对应的公钥进行自身验证签名操作。
[0024]进一步地,所述步骤SI中判断所述报文是否为原文具体为:所述中间件判断接口标识是否为预设数值,是则所述接收到的报文是原文,否则所述接收到的报文不是原文。
[0025]进一步地,所述步骤S8具体包括:
[0026]步骤S8-1:所述中间件获取所述第一显示缓存区中的第二预设字符之后的字符,并判断其是否可以转换为数字,是则执行步骤S8-2,否则执行步骤S8-3 ;
[0027]步骤S8-2:所述中间件将所述第二预设字符之后的字符转换为数字,判断转换后的数字是否在预设范围内,是则执行步骤S8-4,否则执行步骤S8-3 ;
[0028]步骤S8-3:所述中间件将所述第一存储区中的第一个元素和第二个元素置为0,删除所述第一显示缓存区中所述第二预设字符之后的字符,然后在所述第一显示缓存区中顺序存储第一设定数据,将所述报文中的第四预设字符所处字节作为当前解析位置,返回步骤S2 ;
[0029]步骤S8-4:所述中间件将所述第二预设字符之后的字符存储到所述第一存储区的相应位置上,在所述第一显示缓存区中顺序存入第一设定数据,将所述报文中的第四预设字符所处字节作为当前解析位置,返回步骤S2。
[0030]进一步地,述步骤S9具体包括:
[0031]步骤S9-1:所述中间件判断所述报文中当前解析位置的下一个字节数据是否为所述第五预设字符,是则执行步骤S11,否则执行步骤S9-2 ;
[0032]步骤S9-2:所述中间件判断所述报文中当前解析位置的下一个字节数据是否为字符,是执行步骤S10,否则返回步骤S2。
[0033]进一步地,所述步骤S12判断为否时包括:将签名标识置位;
[0034]所述步骤S16具体为:所述中间件判断所述签名标识是否置位,是则所述接收到的报文为交易签名报文,否则所述接收到的报文不为交易签名报文。
[0035]进一步地,在所述步骤S19之前还包括:
[0036]步骤Al:所述下层COS接收到签名指令之后对其进行解析,根据解析得到的头部数据判断签名指令的类型,如为第一签名指令则执行步骤A2,如为第二签名指令则将解析得到的数据域部分中的第一个字节作为当前解析位置,执行步骤A3 ;
[0037]步骤A2:所述下层COS对解析得到的数据域部分进行签名,并将签名结果返回给所述中间件,执行步骤A22 ;
[0038]步骤A3:所述下层COS遍历所述报文中当前解析位置之后的每个字节数据,判断是否查找到所述第一预设字符,是则执行步骤A4,否则执行步骤A17 ;
[0039]步骤A4:所述下层COS将所述第一预设字符所处字节作为当前解析位置,判断所述报文中当前解析位置的下一个字节数据是否为所述第二预设字符,是则执行步骤A5,否则执行步骤A17 ;
[0040]步骤A5:所述下层COS将所述第二预设字符所处字节作为当前解析位置,获取所述报文中所述第一预设字符之前的数据并存储到第二显示缓存区中;
[0041 ] 步骤A6:所述下层COS记录所述第二显示缓存区中的数据的长度并存储到第二存储区中对应的位置,然后将所述第二预设字符顺序存储到所述第二显示缓存区中;
[0042]步骤A7:所述下层COS判断所述报文中当前解析位置的下一个字节数据是否为所述第三预设字符,是则执行步骤AS,否则执行步骤AlO ;
[0043]步骤AS:所述下层COS将所述第三预设字符所处字节作为当前解析位置,判断所述报文中当前解析位置的下一个字节数据是否为所述第四预设字符,是执行步骤A9,否则执行步骤A17 ;
[0044]步骤A9:所述下层COS根据所述第二显示缓存区中所述第二预设字符之后的字符,更新所述第二存储区中,并在所述第二显示缓存区中存入设定数据,将所报文中的所述第四预设字符所处字节作为当前解析位置,返回步骤A3 ;
[0045]步骤AlO:所述下层COS判断所述报文中当前解析位置的下一个字节数据是否符合所述预设条件,是则执行步骤A12,否则执行步骤All ;
[0046]步骤All:所述下层COS将当前解析位置的下一个字节数据顺序存储到所述第二显示缓存区中,将下一字节数据所在位置作为当前解析位置,返回步骤A7;
[0047]步骤A12:所述下层COS更新所述第二存储区,将下一字节所在位置作为当前解析位置并记录该解析位置,更新第二计数器;
[0048]步骤A13:所述下层COS遍历所述报文中当前解析位置之后的每个字节数据,判断是否查找到第五预设字符,是执行步骤A14,否则执行步骤A17 ;
[0049]步骤A14:所述下层COS判断所述第二存储区记录的所述报文中第二预设字符之后的相邻数据是否与所述第二计数器的值相匹配,是则执行步骤A15,否则执行步骤A16 ;
[0050]步骤A15:所述下层COS将所述报文中当前解析位置与找到的下一个第五预设字符之间的数据存储到所述第二显示缓存区中的相应位置,更新所述第二计数器,更新所述第二结构体,返回步骤A13 ;
[0051]步骤A16:所述下层COS更新所述第二计数器,将所述报文中的所述第五预设字符所在字节作为当前解析位置,返回步骤A13 ;
[0052]步骤A17:所述下层COS根据解析结果判断所述签名指令是否符合交易签名报文格式,是则执行步骤A19,否则执行步骤A18 ;
[0053]步骤A18:所述下层COS对解析得到的数据域部分进行签名,输出所述第二显示缓存区中的数据并等待用户确认,执行步骤A20 ;
[0054]步骤A19:所述下层COS对所述解析得到的数据域部分中第一个第五预设字符之后的数据进行签名,输出等待用户确认信息并等待用户确认,执行步骤A20 ;
[0055]步骤A20:所述下层COS判断是否接收到用户的确认信息,是则执行步骤A21,否则签名失败,结束;
[0056]步骤A21:所述下层COS将签名结果返回给所述中间件,执行步骤S19。
[0057]进一步地,所述生成签名指令,并将所述签名指令发送给下层C0S,具体包括:
[0058]步骤Pl:所述中间件判断待发送数据的长度是否大于预设长度,是则执行步骤P2,否则执行步骤P4 ;所述待发送数据为接收到的所述报文或哈希结果;
[0059]步骤P2:所述中间件按照预设长度对待发送数据进行分包,将第一个数据包作为当前数据包;
[0060]步骤P3:所述中间件根据当前数据包按照第二约定格式生成签名指令并发送给下层COS ;
[0061]步骤P4:所述中间件根据待发送数据按照第三约定格式生成签名指令并发送给所述下层COS ;
[0062]在所述步骤Al判断为第二签名指令与步骤A3之间,包括:
[0063]步骤Ql:所述下层COS查找状态机的值,如找到则执行步骤Q2,如未找到则将所述状态机的值设置为第一字符串,执行步骤Q2 ;
[0064]步骤Q2:所述下层COS将解析得到的数据域部分的第一个字节作为当前解析位置;
[0065]步骤Q3:所述下层COS判断状态机的值是否为第一字符串,是则执行步骤A3,否则执行步骤A12 ;
[0066]所述步骤A12中还包括将所述状态机的值置为第二字符串;
[0067]在所述步骤A3、步骤A4、步骤AS中执行步骤A17之前包括:给所述中间件返回第一信息;
[0068]在所述步骤A13判断为否与步骤A17之间,包括:给所述中间件返回第二信息;
[0069]在所述步骤Al7之前包括:
[0070]步骤Yl:所述中间件判断接收到的信息是否为第一信息,是则执行步骤Y2,否则向所述主机报错,结束;
[0071]步骤Y2:所述中间件判断待发送数据是否发送完成,是则向所述下层COS发送获取签名指令,执行步骤A17 ;否则执行步骤Y3 ;
[0072]步骤Y3:所述中间件判断下一个数据包是否为整包数据,是则将下一包数据作为当前数据包,返回步骤P3,否则将下一个数据包作为待发送数据,执行步骤P4。
[0073]进一步地,所述步骤A9具体包括:
[0074]步骤A9-1:所述中间件获取所述第二显示缓存区中的第二预设字符之后的字符,并判断其是否可以转换为数字,是则执行步骤A9-2,否则执行步骤A9-3 ;
[0075]步骤A9-2:所述中间件将所述第二预设字符之后的字符转换为数字,判断转换后的数字是否在预设范围内,是则执行步骤A9-4,否则执行步骤A9-3 ;
[0076]步骤A9-3:所述中间件将所述第二存储区中的第一个元素和第二个元素置为0,删除所述第二显示缓存区中所述第二预设字符之后的字符,然后在所述第二显示缓存区中顺序存储第一设定数据,将所述报文中的第四预设字符所处字节作为当前解析位置,返回步骤A3 ;
[0077]步骤A9-4:所述中间件将所述第二预设字符之后的字符存储到所述第二存储区的相应位置上,在所述第二显示缓存区中顺序存入第一设定数据,将所述报文中的第四预设字符所处字节作为当前解析位置,返回步骤A3。
[0078]进一步地,所述步骤AlO具体包括:
[0079]步骤A10-1:所述中间件判断所述报文中当前解析位置的下一个字节数据是否为所述第五预设字符,是则执行步骤A12,否则执行步骤A10-2 ;
[0080]步骤A10-2:所述中间件判断所述报文中当前解析位置的下一个字节数据是否为字符,是执行步骤All,否则返回步骤A3。
[0081]进一步地,所述步骤SI判断所述报文是否为原文之前,包括:
[0082]所述中间件将接收到的主机下发的报文存储到第一解析缓存区中。
[0083]进一步地,如所述中间件接收到所述下层COS返回的数据为交易签名结果,则步骤S19具体包括:
[0084]所述中间件对接收到的交易签名结果使用当前私钥对应的公钥进行解密,如解密成功则根据记录的数据内容位置从所述第一解析缓存区中的报文中获取数据内容,对获取的数据内容进行哈希计算,判断哈希结果与解密结果是否相同,是则验证通过,否则验证未通过,如解密失败,则签名失败,结束。
[0085]进一步地,如所述中间件接收到所述下层COS返回的数据为普通签名结果,则步骤S19具体包括:
[0086]所述中间件对接收到的签名结果进行解密,如解密成功则对所述第一解析缓存区中的原文进行哈希计算,判断哈希结果与解密结果是否相同,是则验证通过,否则验证未通过,如解密失败,则签名失败,结束。
[0087]进一步地,所述步骤S9具体包括:
[0088]步骤S9-1:所述中间件判断所述报文中当前解析位置的下一个字节数据是否为所述第五预设字符,是则执行步骤S11,否则执行步骤S9-2 ;
[0089]步骤S9-2:所述中间件判断所述报文中当前解析位置的下一个字节数据是否为字符,是执行步骤S10,否则返回步骤S2。
[0090]本发明与现有技术相比,具有以下优点:
[0091]在本发明的方法中,中间件解析报文的代码和下层COS解析报文的代码一致,保证客户端显示屏上显示的信息与在USB Key的液晶屏中上显示的信息一致,保证“所见即所签”,避免了报文篡改;在用户确认交易内容无误后,按确认键后才进行签名,有效防止交易挟持攻击,有效地提高了签名的安全性。

【专利附图】

【附图说明】
[0092]图1和图2为本发明实施例一提供的一种复核签名的实现方法流程图;
[0093]图3和图4为本发明实施例一提供的一种复核签名的实现方法的另一种实现流程图。

【具体实施方式】
[0094]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0095]实施例一
[0096]本发明实施例一提供一种复核签名的实现方法,如图1所示,包括:
[0097]步骤100:中间件接收主机下发的报文并将其存储到第一解析缓存区中;
[0098]在本实施例中,接收到的报文以下述四种为例进行说明;
[0099](I)收款人:=% 3\n 金额:=% l\n 日期:=% 4| 100.00|l2 张三2014-9-8|abc ;
[0100](2)收款人:=% 0\n 金额:=% l\n 日期:=% 4| 100.00|l2 张三2014-9-8|abc ;
[0101](3)收款人:=% -l\n 金额:=% l\n 日期:=% 4|l00.00|l2 张三2014-9-8|abc ;
[0102](4)收款人:=% 23\n 金额:=% l\n 日期:=% 4| 100.00|l2 张三2014-9-8|abc ;
[0103]步骤101:中间件判断接收到的报文是否为原文,是则将报文的第一个字节作为当前解析位置,执行步骤103,否则执行步骤102 ;
[0104]在本实施例中主机通过调用不同接口将报文发送给中间件,当主机调用SetHashParam接口时,将接口标识清零,表示下发的报文不是原文;当主机调用HashData接口时,将接口标识设置为预设数值,表示下发的报文是原文;
[0105]步骤101具体为:中间件判断接口标识是否为预设数值,是则接收到的报文是原文,否则接收到的报文不是原文;
[0106]在本实施例中,如中间件接收到主机下发的报文不是原文,则表示主机对原文已进行了哈希计算,中间件接收到的是哈希结果;
[0107]步骤102:中间件根据接收到的报文按照第一约定格式生成签名指令并将其发送给下层COS,执行步骤124 ;
[0108]步骤103:中间件遍历第一解析缓存区中的当前解析位置之后的每个字节数据,判断是否查找到第一预设字符,是则执行步骤104,否则执行步骤122 ;
[0109]在本实施例中,第一预设字符为=;
[0110]步骤104:中间件将第一预设字符所处字节作为当前解析位置,判断第一解析缓存区中当前解析位置的下一个字节数据是否为第二预设字符,是则执行步骤105,否则执行步骤122 ;
[0111]在本实施例中,第二预设字符为% ;
[0112]步骤105:中间件将第二预设字符所处字节作为当前解析位置,获取第一解析缓存区中第一预设字符之前的数据并存储到第一显示缓存区中;
[0113]在本实施例的实例中,第一显示缓存区中当前的信息为:收款人:
[0114]步骤106:中间件记录第一显示缓存区中的数据的长度并存储到第一存储区中对应的位置,并将查找到的第二预设字符顺序存储到第一显示缓存区中;
[0115]在本实施例中,第一存储区具体为:HEAD□,其中HEAD[].1用于记录第一解析缓存区中第二预设字符之后的数字数据,HEAD[].2用于记录第一解析缓存区中第二预设字符之后的数据长度,HEADG.3用于记录字符在第一显示缓存区中的偏移;具体以第一个例子来说,步骤105之后第一存储区HEADl [] = {{0,0,8}, {0,0,0}……};本实施例的实例中第一存储区中包括三个结构体:表不第一条显不信息的第一结构体HEAD [O]、表不第二条显示信息的第二结构体HEAD[1]、表示第三条显示信息的第三结构体HEAD[2];
[0116]在本实施例的实例中,当前显示缓存区中的信息为:收款人:% ;
[0117]步骤107:中间件判断第一解析缓存区中当前解析位置的下一个字节数据是否为第三预设字符,是则执行步骤108,否则执行步骤113 ;
[0118]在本实施例中,第三预设字符为\ ;
[0119]步骤108:中间件将第三预设字符所处字节作为当前解析位置,判断第一解析缓存区中当前解析位置的下一个字节数据是否为第四预设字符,是执行步骤109,否则执行步骤 122 ;
[0120]在本实施例中,第四预设字符为η ;
[0121]步骤109:中间件获取第一显示缓存区中的第二预设字符之后的字符,并判断其是否可以转换为数字,是则执行步骤110,否则执行步骤111 ;
[0122]具体以第一个例子来说明,%之后的字符为3,可以转换为数字,则执行步骤110 ;第三个例子%之后的字符为-1不可以转换为数字,则执行步骤111 ;
[0123]步骤110:中间件将第二预设字符之后的字符转换为数字,判断转换后的数字是否在预设范围内,是则执行步骤112,否则执行步骤111 ;
[0124]具体的,本实施例中的预设范围是I至256 ;
[0125]步骤111:将第一存储区中的第一个元素和第二个元素置为0,删除第一显示缓存区中的第二预设字符之后的字符,然后在第一显示缓存区中顺序存储第一设定数据,将第一解析缓存区中的第四预设字符所处字节作为当前解析位置,返回步骤103 ;
[0126]第三个例子的第一结构体数据数组为:HEAD3[] = {{0,0,8}, {0,0,0},……};
[0127]步骤112:中间件将第二预设字符之后的字符存储到第一存储区的相应位置上,在第一显示缓存区中顺序存入第一设定数据,将第一解析缓存区中的第四预设字符所处字节作为当前解析位置,返回步骤103 ;
[0128]在本实施例中,第一设定数据为ODOA ;步骤112之后第一个例子中的第一存储区为HEADl [] = {{3,2,8},{0,0,0},{0,0,0}};第二个例子中的第一存储区为HEAD2 口 = {{0,2,8}, {0,0,0}, {0,0,0}};第四个例子中的第一存储区为 HEAD4 []={{17,3,8},{0,0,0}, {0,0,0}};在本实施例的第一个实例中,当前显示缓存区中的信息为:收款人:% 30D0A ;第二个实例中,当前显示缓存区中的信息为:收款人:% 00D0A ;第四个实例中,当前显示缓存区中的信息为:收款人:% 230D0A ;
[0129]步骤113:中间件判断第一解析缓存区中当前解析位置的下一个字节数据是否为第五预设字符,是则执行步骤116,否则执行步骤114 ;
[0130]在本实施例中,第五预设字符为I ;
[0131]步骤114:中间件判断第一解析缓存区中当前解析位置的下一个字节数据是否为字符,是执行步骤115,否则返回步骤103 ;
[0132]步骤115:中间件将当前解析位置的下一个字节数据顺序存储到第一显示缓存区中,将下一字节数据所处位置作为当前解析位置,返回步骤107 ;
[0133]在本实施例的第一个实例中,第一显示缓存区中的信息为:收款人:% 3 ;第二个实例中,第一显示缓存区中的信息为:收款人:% O ;第三个实例中,第一显示缓存区中的信息为:收款人:% -1 ;第四个实例中,第一显示缓存区中的信息为:收款人:% 23 ;
[0134]步骤116:中间件更新第一存储区,将第一解析缓存区中找到的第五预设字符所在位置作为当前解析位置并记录该解析位置,更新第一计数器;
[0135]步骤116之后最终解析得到的第一个实例中的第一存储区为HEAD[]={{3, 2,8}, {1,2, 12},{4,2,lc}};第二个例子中的第一存储区为 HEAD[]={{0,0,8}, {1,2, 12},{4,2,lc}};第三个例子中的第一存储区为HEAD[]={{0,0,8}, {1,2, 11}, {4, 2, lb}};第四个例子中的第一存储区为 HEAD[] = {{17、3、8},{1、
2、13},{4、2、ld}};在本实施例中,第一计数器用于记录第五预设字符的个数;优选的第一计数器的初始值为0,更新第一计数器具体为:第一计数器的值自加I ;
[0136]步骤117:中间件遍历第一解析缓存区中当前解析位置之后的每个字节数据,判断是否查找到下一个第五预设字符,是执行步骤118,否则将签名标识置位,执行步骤121 ;
[0137]步骤118:中间件判断第一存储区记录的第一解析缓存区中第二预设字符之后的相邻数据是否与第一计数器的值相匹配,是则执行步骤119,否则执行步骤120 ;
[0138]步骤119:中间件用第一解析缓存区中当前解析位置与找到的下一个第五预设字符之间的数据替换第一显示缓存区中相应位置上的数据,更新第一计数器,更新第一存储区,返回步骤117;
[0139]在本实施例中,对于第一实例来说,第一次执行到步骤119之后第一显示缓存区的数据为:收款人:% 30D0A金额:100.0OODOA日期:% 4 ;第一存储区为:HEAD1 []={{3, 2,8}, {1,0, 18},{4,2,20}};
[0140]对于第一个实例来说,解析完整个报文之后第一显示缓存区中的数据为:收款人:张三 ODOA 金额:100.000D0A 日期:2014-9-80D0A
[0141]第一结构体中数组为:HEAD口 = {{3,0, c}, {1,0, la}, {4,0, 2a}}
[0142]对于第二个实例来说,解析完整个报文之后第一显示缓存区中的数据为:收款人:% 00D0A 金额:100.000D0A 日期:2014-9-80D0A
[0143]第一存储区为:HEAD[]= {{0,0,8}, {1,0, 18}, {4,0, 28}}
[0144]对于第三个实例来说,解析完整个报文之后第一显示缓存区中的数据为:收款人:% ODOA 金额:100.000D0A 日期:2014-9-80D0A
[0145]第一存储区为:HEAD[]= {{0,0,8}, {1,0, 17}, {4,0, 27}}
[0146]对于第四个实例来说,解析完整个报文之后第一显示缓存区中的数据为:收款人:% 230D0A 金额:100.000D0A 日期:2014-9-80D0A
[0147]第一存储区为:HEAD[]= {{17, 3,8}, {1,0, 19}, {4,0, 29}}
[0148]步骤120:中间件更新第一计数器,将第一解析缓存区中的下一个第五预设字符所在字节作为当前解析位置,返回步骤117 ;
[0149]步骤121:中间件判断接收到的报文是否为交易签名报文,是则执行步骤123,否则执行步骤122 ;
[0150]具体的,在本实施例中,判断签名标识是否置位,是则接收到的报文为交易签名报文,否则接收到的报文不为交易签名报文;
[0151]在本实施例中,步骤103、104、108、121判断为否时还有其他实现方式,即直接向主机报错不用执行步骤122 ;
[0152]步骤122:中间件对接收到的报文进行哈希计算,根据哈希结果按照第一约定格式生成第一签名指令并将其发送给下层C0S,执行步骤124 ;
[0153]在本实施例中,当哈希算法为SHAl时,中间件将哈希算法标识的值置为0x12 ;当哈希算法为MD5时,中间件将哈希算法标识的值置为0x32 ;中间件在步骤122中根据设置的哈希算法对接收到的报文进行哈希计算;
[0154]中间件给下层cos发送签名指令之前,需要先向中间件发送MSE指令,例如为:8001Alge 8402KID 23,下层cos根据Alge使用对应的哈希算法,根据KID (密钥索引)获取对应的私钥,在普通签名过程中,下层cos在接收到报文时根据对应的哈希算法对接收到的报文进行哈希计算,使用对应的私钥对哈希结果进行签名得到签名结果;
[0155]优选的,本实施例中第一约定格式的头部数据为002a 9081 ;生成的第一签名指令为:002a 9081哈希结果的长度哈希结果;
[0156]步骤123:中间件根据第一解析缓存区中的报文按照第二约定格式生成第二签名指令并将其发送给下层C0S,执行步骤124 ;
[0157]优选的,本实施例中第二约定格式的头部数据为102a 9080 ;生成的第二签名指令为:102a 9080报文的长度报文;
[0158]步骤124:下层COS接收到的签名指令后对其进行解析,根据解析得到的头部数据判断签名指令的类型,如为第一签名指令则执行步骤125,如为第二签名指令则执行步骤126 ;
[0159]在本实施例中,第一签名指令中的数据域部分为哈希结果,第二签名指令中的数据域部分为原文数据;
[0160]步骤125:下层COS对解析得到的数据域部分进行签名,并将签名结果返回给中间件,执行步骤150 ;
[0161]步骤126:下层COS将解析得到的数据域部分保存到第二解析缓存区中,并将第二解析缓存区中的第一个字节作为当前解析位置;
[0162]步骤127:下层COS遍历第二解析缓存区中的当前解析位置之后的每个字节数据,判断是否查找到第一预设字符,是则执行步骤128,否则执行步骤145 ;
[0163]在本实施例中,第一预设字符为=;
[0164]步骤128:下层COS将第一预设字符所处字节作为当前解析位置,判断第一解析缓存区中当前解析位置的下一个字节数据是否为第二预设字符,是则,是执行步骤129,否则执行步骤145 ;
[0165]在本实施例中,第二预设字符为% ;
[0166]步骤129:下层COS将第二预设字符所处字节作为当前解析位置,获取第二解析缓存区中第一预设字符之前的数据并存储到第二显示缓存区中;
[0167]步骤130:下层COS记录第二显示缓存区中的数据的长度并存储到第二存储区中对应的位置,并将查找到的第二预设字符顺序存储到第二显示缓存区中;
[0168]本实施例中,第二结构体数据组与第一存储区相同,在此不再赘述;
[0169]步骤131:下层COS判断第二解析缓存区中当前解析位置的下一个字节数据是否为第三预设字符,是则执行步骤132,否则执行步骤137 ;
[0170]在本实施例中,第三预设字符为\ ;
[0171]步骤132:下层COS将第三预设字符所处字节作为当前解析位置,判断第二解析缓存区中当前解析位置的下一个字节数据是否为第四预设字符,是执行步骤133,否则执行步骤 145 ;
[0172]在本实施例中,第四预设字符为η ;
[0173]步骤133:下层COS获取第二显示缓存区中的第二预设字符之后的字符,并判断其是否可以转换为数字,是则执行步骤134,否则执行步骤135 ;
[0174]步骤134:下层COS将第二预设字符之后的字符转换为数字,判断转换后的数字是否在预设范围内,是则执行步骤136,否则执行步骤135 ;
[0175]具体的,本实施例中的预设范围为至256 ;
[0176]步骤135:下层COS将第二存储区中的第一个元素和第二个元素置为0,删除第二显示缓存区中的第二预设字符之后的字符,然后在第二显示缓存区中顺序存储第一设定数据,将第二解析缓存区中的第四预设字符所处字节作为当前解析位置,返回步骤127 ;
[0177]步骤136:下层COS将第二预设字符之后的字符存储到第二存储区的相应位置上,在第二显示缓存区中顺序存入第一设定数据,将第二解析缓存区中的第四预设字符所处字节作为当前解析位置,返回步骤127 ;
[0178]在本实施例中,第一设定数据为ODOA ;
[0179]步骤137:下层COS判断第二解析缓存区中当前解析位置的下一个字节数据是否为第五预设字符,是则执行步骤140,否则执行步骤138 ;
[0180]在本实施例中,第五预设字符为I ;
[0181]步骤138:下层COS判断第二解析缓存区中当前解析位置的下一个字节数据是否为字符,是执行步骤139,否则返回步骤127 ;
[0182]步骤139:下层COS将下一个字节数据顺序存储到第二显示缓存区中,将下一个字节数据所处位置作为当前解析位置,返回步骤131 ;
[0183]步骤140:下层COS更新第二存储区,将第二解析缓存区中找到的第五预设字符所在位置作为当前解析位置并记录该解析位置,更新第二计数器;
[0184]在本实施例中,第二计数器用于记录第五预设字符的个数;优选的第二计数器的初始值为O,更新第二计数器具体为:第二计数器的值自加I;
[0185]步骤141:下层COS遍历第二解析缓存区中当前解析位置之后的每个字节数据,判断是否查找到下一个第五预设字符,是执行步骤142,否则将签名标识置位,执行步骤145 ;
[0186]步骤142:下层COS判断第二存储区记录的第二解析缓存区中第二预设字符之后的相邻数据是否与第二计数器的值相匹配,是则执行步骤143,否则执行步骤144 ;
[0187]步骤143:下层COS用第二解析缓存区中当前解析位置与找到的下一个第五预设字符之间的数据替换第二显示缓存区中相应位置上的数据,更新第二计数器,并更新第二结构体,返回步骤141 ;
[0188]步骤144:下层COS更新第二计数器,将第二解析缓存区中的下一个第五预设字符所在字节作为当前解析位置,返回步骤141 ;
[0189]步骤145:下层COS根据解析结果判断接收到的指令是否符合交易签名报文格式,是则执行步骤147,否则执行步骤146 ;
[0190]具体的,在本实施例中,判断签名标识是否置位,是则接收到的报文符合交易签名报文格式,否则接收到的报文不符合交易签名报文格式;
[0191]步骤146:下层COS对解析得到的数据域部分进行签名,输出第二显示缓存区中保存的关键?目息并等待用户确认,执彳丁步骤148 ;
[0192]在本实施例中,步骤145判断为否时还有其他实现方式,即下层COS对解析得到的数据域部分进行签名,然后下层COS向中间件返回无需按键信息(例如返回9000),中间件接收到信息后如判断为无需按键信息则向主机报错;
[0193]步骤147:下层COS对第二解析缓存区中第一个第五预设字符之后的数据进行签名,输出等待用户确认信息并等待用户确认,执行步骤148 ;
[0194]优选的,在本实施例中,步骤147中还包括:下层COS向中间件返回需要按键信息(例如返回9001);
[0195]步骤148:下层COS判断是否接收到用户的确认信息,是则执行步骤149,否则签名失败,结束;
[0196]步骤149:下层COS将签名结果返回给中间件,执行步骤150 ;
[0197]步骤150:中间件根据保存的数据使用当前私钥对应的公钥对接收到的签名结果进行验证,如验证通过则签名成功,结束,如验证未通过则签名失败,结束;
[0198]在本实施例中,如中间件接收到的签名结果为交易签名结果,则中间件使用当前私钥对应的公钥对接收到的签名结果进行解密,如解密成功则根据记录的数据内容位置从第一解析缓存区中的报文中获取数据内容,对获取的数据内容进行哈希计算,判断哈希结果与解密结果是否相同,是则验证通过,否则验证未通过,如解密失败,则签名失败,结束;
[0199]如中间件接收到的签名结果为普通签名结果,则中间件使用当前私钥对应的公钥对接收到的签名结果进行解密,如解密成功则对第一解析缓存区中的报文进行哈希计算,判断哈希结果与解密结果是否相同,是则验证通过,否则验证未通过,如解密失败,则签名失败,结束。
[0200]在本实施例中,中间件向下层COS发送签名结果时,可以分包进行发送,即步骤102、123-148或121、123-148或122-148可替换为步骤301-337,如图3和图4所示,包括:
[0201]步骤301:中间件判断待发送数据的长度是否大于预设长度,是则执行步骤302,否则将待发送数据作为当前待发送数据,执行步骤304 ;
[0202]在本实施例中,步骤102中的待发送数据为接收到的报文,步骤119中的待发送数据为哈希结果,步骤120中的待发送数据为第一解析缓存区中的报文;
[0203]步骤302:中间件按照预设长度对待发送数据进行分包,将第一包数据作为当前数据包;
[0204]步骤303:中间件根据当前数据包按照第二约定格式生成签名指令并发送给下层COS,执行步骤305 ;
[0205]优选的,本实施例中第二约定格式的头部数据为002a 9080 ;
[0206]步骤304:中间件对当前待发送数据按照第三约定格式生成签名指令并发送给下层COS,执行步骤305 ;
[0207]步骤305:下层COS接收到的签名指令后对其进行解析,根据解析得到的头部数据判断签名指令的类型,如为第一签名指令则执行步骤306,如为第二签名指令则执行步骤307 ;
[0208]在本实施例中,第一签名指令中的数据域部分为哈希结果,第二签名指令中的数据域部分为原文数据;
[0209]优选的,在本实施例中,步骤305下层COS对第一包数据解析之后与根据解析得到的头部判断签名指令的类型之间还可以包括:下层判断解析结果中是否有第五预设字符,是则继续,否则报错,结束;
[0210]步骤306:下层COS对解析得到的数据域部分进行签名,并将签名结果返回给中间件,执行步骤338 ;
[0211 ] 步骤307:下层COS查找状态机的值,如找到则执行步骤308,如未找到则将状态机的值设置为第一字符串,执行步骤308 ;
[0212]在本实施例中,状态机的初始值为第一字符串;
[0213]步骤308:下层COS将解析得到的数据域部分保存到第二解析缓存区中,并将第二解析缓存区中的第一个字节作为当前解析位置;
[0214]步骤309:下层COS判断状态机的值是否为第一字符串,是则执行步骤310,否则执行步骤324 ;
[0215]步骤310:下层COS遍历第二解析缓存区中的当前解析位置之后的每个字节数据,判断是否查找到第一预设字符,是则执行步骤311,否则给中间件返回第一信息,执行步骤329 ;
[0216]在本实施例中,第一预设字符为=;第一信息为错误信息;
[0217]步骤311:下层COS将第一预设字符所处字节作为当前解析位置,判断第一解析缓存区中当前解析位置的下一个字节数据是否为第二预设字符,是则,是执行步骤312,否则给中间件返回第一信息,执行步骤329 ;
[0218]在本实施例中,第二预设字符为% ;
[0219]步骤312:下层COS将第二预设字符所处字节作为当前解析位置,获取第二解析缓存区中第一预设字符之前的数据并存储到第二显示缓存区中;
[0220]步骤313:下层COS记录第二显示缓存区中的数据的长度并存储到第二存储区中对应的位置,并将查找到的第二预设字符顺序存储到第二显示缓存区中;
[0221]本实施例中,第二存储区与第一存储区相同,在此不再赘述;
[0222]步骤314:下层COS判断第二解析缓存区中当前解析位置的下一个字节数据是否为第三预设字符,是则执行步骤315,否则执行步骤320 ;
[0223]在本实施例中,第三预设字符为\ ;
[0224]步骤315:下层COS将第三预设字符所处字节作为当前解析位置,判断第二解析缓存区中当前解析位置的下一个字节数据是否为第四预设字符,是执行步骤316,否则给中间件返回第一信息,执行步骤329 ;
[0225]在本实施例中,第四预设字符为η ;
[0226]步骤316:下层COS获取第二显示缓存区中的第二预设字符之后的字符,并判断其是否可以转换为数字,是则执行步骤317,否则执行步骤318 ;
[0227]步骤317:下层COS将第二预设字符之后的字符转换为数字,判断转换后的数字是否在预设范围内,是则执行步骤319,否则执行步骤318 ;
[0228]具体的,本实施例中的预设范围为I至256 ;
[0229]步骤318:下层COS将第二存储区中的第一个元素和第二个元素置为0,删除第二显示缓存区中的第二预设字符之后的数据,然后在第二显示缓存区中顺序存储第一设定数据,将第二解析缓存区中的第四预设字符所处字节作为当前解析位置,返回步骤310 ;
[0230]步骤319:下层COS将第二预设字符之后的字符存储到第二存储区的相应位置上,在第二显示缓存区中顺序存入第一设定数据,将第二解析缓存区中的第四预设字符所处字节作为当前解析位置,返回步骤310 ;
[0231 ] 在本实施例中,第一设定数据为ODOA ;
[0232]步骤320:下层COS判断第二解析缓存区中当前解析位置的下一个字节数据是否为第五预设字符,是则执行步骤324,否则执行步骤321 ;
[0233]在本实施例中,第五预设字符为I ;
[0234]步骤321:下层COS判断第二解析缓存区中当前解析位置的下一个字节数据是否为字符,是执行步骤322,否则执行步骤323 ;
[0235]步骤322:下层COS将下一个字节数据顺序存储到第二显示缓存区中,将下一个字节数据所处位置作为当前解析位置,返回步骤314 ;
[0236]步骤323:下层COS判断当前解析位置的下一个字节是否为当前是数据包的最后一个字节,是则给中间件返回第一信息,执行步骤329 ;否则将当前解析位置的下一个字节作为当前解析位置,返回步骤310 ;
[0237]步骤324:下层COS更新第二存储区,将第二解析缓存区中找到的第五预设字符所在位置作为当前解析位置并记录该解析位置,更新第二计数器,将状态机的值设为第二字符串,执行步骤325 ;
[0238]在本实施例中,第二计数器用于记录第五预设字符的个数;优选的第二计数器的初始值为0,更新第二计数器具体为:第二计数器的值自加I ;
[0239]步骤325:下层COS遍历第二解析缓存区中当前解析位置之后的每个字节数据,判断是否查找到下一个第五预设字符,是执行步骤326,否则给中间件返回第二信息,执行步骤 329 ;
[0240]在本实施例中,第二信息为正确信息;
[0241]步骤326:下层COS判断第二存储区记录的第二解析缓存区中第二预设字符之后的相邻数据是否与第二计数器的值相匹配,是则执行步骤327,否则执行步骤328 ;
[0242]步骤327:下层COS用第二解析缓存区中当前解析位置与找到的下一个第五预设字符之间的数据替换第二显示缓存区中相应位置上的数据,更新第二计数器,更新第二结构体,返回步骤325 ;
[0243]步骤328:下层COS更新第二计数器,将第二解析缓存区中的下一个第五预设字符所在字节作为当前解析位置,返回步骤325 ;
[0244]步骤329:中间件判断接收的信息是否为第一信息,是则向主机报错,结束,否则执行步骤330 ;
[0245]步骤330:中间件判断待发送数据是否发送完成,是则执行步骤332,否则执行步骤 331 ;
[0246]步骤331:中间件判断下一包数据是否为整包数据,是将下一包数据作为当前数据包,则返回步303,否则将下一个数据包的数据作为当前待发送数据,返回步骤304 ;
[0247]步骤332:中间件向下层COS发送获取签名指令;
[0248]步骤333:下层COS判断解析结果是否符合交易签名报文格式,是则执行步骤335,否则执行步骤334 ;
[0249]在本实施例中,该步骤中的解析结果为步骤305中解析得到的;
[0250]具体的,在本实施例中,判断签名标识是否置位,是则接收到的报文符合交易签名报文格式,否则接收到的报文不符合交易签名报文格式;
[0251]步骤334:下层COS对解析得到的数据域部分进行签名,输出第二显示缓存区中保存的关键?目息并等待用户确认,执彳丁步骤336 ;
[0252]步骤335:下层COS对第二解析缓存区中第一个第五预设字符之后的字符进行签名,输出等待用户确认信息并等待用户确认,执行步骤336 ;
[0253]优选的,在本实施例中,步骤335中还包括:下层COS向中间件返回需要按键信息(例如返回9001);
[0254]步骤336:下层COS判断是否接收到用户的确认信息,是则执行步骤337,否则签名失败,结束;
[0255]步骤337:下层COS将签名结果返回给中间件,执行步骤338 ;
[0256]步骤338:中间件根据保存的数据对接收到的签名结果进行验证,如验证通过则签名成功,结束,如验证未通过则签名失败,结束。
[0257]以上所述,仅为本发明较佳的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本【技术领域】的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
【权利要求】
1.一种复核签名的实现方法,其特征在于,包括: 步骤S1:当中间件接收到主机下发的报文时,判断所述报文是否为原文,是则将所述报文的第一个字节作为当前解析位置,执行步骤S2,否则根据所述报文按照第一约定格式生成第一签名指令,将所述第一签名指令发送给下层COS,执行步骤S19 ; 步骤S2:所述中间件遍历所述报文中当前解析位置之后的每个字节数据,判断是否查找到第一预设字符,是则执行步骤S3,否则执行步骤S17 ; 步骤S3:所述中间件将所述第一预设字符所处字节作为当前解析位置,判断所述报文中当前解析位置的下一个字节数据是否为第二预设字符,是则执行步骤S4,否则执行步骤S17 ; 步骤S4:所述中间件将所述第二预设字符所处字节作为当前解析位置,获取所述报文中第一预设字符之前的数据并存储到第一显示缓存区中; 步骤S5:所述中间件记录所述第一显示缓存区中的数据的长度并存储到第一存储区中对应的位置,然后将所述第二预设字符顺序存储到所述第一显示缓存区中; 步骤S6:所述中间件判断所述报文中当前解析位置的下一个字节数据是否为第三预设字符,是则执行步骤S7,否则执行步骤S9 ; 步骤S7:所述中间件将所述第三预设字符所处字节作为当前解析位置,判断所述报文中当前解析位置的下一个字节数据是否为第四预设字符,是执行步骤S8,否则执行步骤S17 ; 步骤S8:所述中间件根据所述第一显示缓存区中所述第二预设字符之后的字符,更新所述第一存储区,并在所述第一显示缓存区中存入设定数据,将所报文中的所述第四预设字符所处字节作为当前解析位置,返回步骤S2 ; 步骤S9:所述中间件判断所述报文中当前解析位置的下一个字节数据是否符合预设条件,是则执行步骤SI I,否则执行步骤SlO ; 步骤SlO:所述中间件将当前解析位置的下一个字节数据顺序存储到所述第一显示缓存区中,将下一字节数据所在位置作为当前解析位置,返回步骤S6 ; 步骤Sll:所述中间件更新所述第一存储区,将当前解析位置的下一字节数据所在位置作为当前解析位置并记录该解析位置,更新第一计数器; 步骤S12:所述中间件遍历所述报文中当前解析位置之后的每个字节数据,判断是否查找到第五预设字符,是执行步骤S13,否则执行步骤S16 ; 步骤S13:所述中间件判断所述第一存储区记录的所述报文中第二预设字符之后的相邻数据是否与所述第一计数器的值相匹配,是则执行步骤S14,否则执行步骤S15 ; 步骤S14:所述中间件将所述报文中当前解析位置与找到的下一个第五预设字符之间的数据存储到所述第一显示缓存区中的相应位置,更新所述第一计数器,更新所述第一结构体,返回步骤S12 ; 步骤S15:所述中间件更新所述第一计数器,将所述报文中的所述第五预设字符所在字节作为当前解析位置,返回步骤S12 ; 步骤S16:所述中间件判断所述报文是否为交易签名报文,是则执行步骤S18,否则执行步骤S17 ; 步骤S17:所述中间件对所述报文进行哈希计算,根据所述哈希结果按照第一约定格式生成第一签名指令,将所述第一签名指令发送给下层COS,执行步骤S19 ; 步骤S18:所述中间件根据所述报文按照第二约定格式生成第二签名指令,并将所述第二签名指令发送给下层COS,执行步骤S19 ; 步骤S19:所述中间件接收所述下层COS返回的数据,一并使用当前私钥对应的公钥进行自身验证签名操作。
2.如权利要求1所述的方法,其特征在于,所述步骤SI中判断所述报文是否为原文具体为:所述中间件判断接口标识是否为预设数值,是则所述接收到的报文是原文,否则所述接收到的报文不是原文。
3.如权利要求1所述的方法,其特征在于,所述步骤S8具体包括: 步骤S8-1:所述中间件获取所述第一显示缓存区中的第二预设字符之后的字符,并判断其是否可以转换为数字,是则执行步骤S8-2,否则执行步骤S8-3 ; 步骤S8-2:所述中间件将所述第二预设字符之后的字符转换为数字,判断转换后的数字是否在预设范围内,是则执行步骤S8-4,否则执行步骤S8-3 ; 步骤S8-3:所述中间件将所述第一存储区中的第一个元素和第二个元素置为0,删除所述第一显示缓存区中所述第二预设字符之后的字符,然后在所述第一显示缓存区中顺序存储第一设定数据,将所述报文中的第四预设字符所处字节作为当前解析位置,返回步骤S2 ; 步骤S8-4:所述中间件将所述第二预设字符之后的字符存储到所述第一存储区的相应位置上,在所述第一显示缓存区中顺序存入第一设定数据,将所述报文中的第四预设字符所处字节作为当前解析位置,返回步骤S2。
4.如权利要求1所述的方法,其特征在于,述步骤S9具体包括: 步骤S9-1:所述中间件判断所述报文中当前解析位置的下一个字节数据是否为所述第五预设字符,是则执行步骤S11,否则执行步骤S9-2 ; 步骤S9-2:所述中间件判断所述报文中当前解析位置的下一个字节数据是否为字符,是执行步骤S10,否则返回步骤S2。
5.如权利要求1所述的方法,其特征在于,所述步骤S12判断为否时包括:将签名标识置位; 所述步骤S16具体为:所述中间件判断所述签名标识是否置位,是则所述接收到的报文为交易签名报文,否则所述接收到的报文不为交易签名报文。
6.如权利要求1所述的方法,其特征在于,在所述步骤S19之前还包括: 步骤Al:所述下层COS接收到签名指令之后对其进行解析,根据解析得到的头部数据判断签名指令的类型,如为第一签名指令则执行步骤A2,如为第二签名指令则将解析得到的数据域部分中的第一个字节作为当前解析位置,执行步骤A3 ; 步骤A2:所述下层COS对解析得到的数据域部分进行签名,并将签名结果返回给所述中间件,执行步骤A22 ; 步骤A3:所述下层COS遍历所述报文中当前解析位置之后的每个字节数据,判断是否查找到所述第一预设字符,是则执行步骤A4,否则执行步骤A17 ; 步骤A4:所述下层COS将所述第一预设字符所处字节作为当前解析位置,判断所述报文中当前解析位置的下一个字节数据是否为所述第二预设字符,是则执行步骤A5,否则执行步骤A17 ; 步骤A5:所述下层COS将所述第二预设字符所处字节作为当前解析位置,获取所述报文中所述第一预设字符之前的数据并存储到第二显示缓存区中; 步骤A6:所述下层COS记录所述第二显示缓存区中的数据的长度并存储到第二存储区中对应的位置,然后将所述第二预设字符顺序存储到所述第二显示缓存区中; 步骤A7:所述下层COS判断所述报文中当前解析位置的下一个字节数据是否为所述第三预设字符,是则执行步骤AS,否则执行步骤AlO ; 步骤AS:所述下层COS将所述第三预设字符所处字节作为当前解析位置,判断所述报文中当前解析位置的下一个字节数据是否为所述第四预设字符,是执行步骤A9,否则执行步骤A17 ; 步骤A9:所述下层COS根据所述第二显示缓存区中所述第二预设字符之后的字符,更新所述第二存储区中,并在所述第二显示缓存区中存入设定数据,将所报文中的所述第四预设字符所处字节作为当前解析位置,返回步骤A3 ; 步骤AlO:所述下层COS判断所述报文中当前解析位置的下一个字节数据是否符合所述预设条件,是则执行步骤A12,否则执行步骤All ; 步骤All:所述下层COS将当前解析位置的下一个字节数据顺序存储到所述第二显示缓存区中,将下一字节数据所在位置作为当前解析位置,返回步骤A7; 步骤A12:所述下层COS更新所述第二存储区,将下一字节所在位置作为当前解析位置并记录该解析位置,更新第二计数器; 步骤A13:所述下层COS遍历所述报文中当前解析位置之后的每个字节数据,判断是否查找到第五预设字符,是执行步骤A14,否则执行步骤A17 ; 步骤A14:所述下层COS判断所述第二存储区记录的所述报文中第二预设字符之后的相邻数据是否与所述第二计数器的值相匹配,是则执行步骤A15,否则执行步骤A16 ; 步骤A15:所述下层COS将所述报文中当前解析位置与找到的下一个第五预设字符之间的数据存储到所述第二显示缓存区中的相应位置,更新所述第二计数器,更新所述第二结构体,返回步骤A13 ; 步骤A16:所述下层COS更新所述第二计数器,将所述报文中的所述第五预设字符所在字节作为当前解析位置,返回步骤A13 ; 步骤A17:所述下层COS根据解析结果判断所述签名指令是否符合交易签名报文格式,是则执行步骤A19,否则执行步骤A18 ; 步骤A18:所述下层COS对解析得到的数据域部分进行签名,输出所述第二显示缓存区中的数据并等待用户确认,执行步骤A20 ; 步骤A19:所述下层COS对所述解析得到的数据域部分中第一个第五预设字符之后的数据进行签名,输出等待用户确认信息并等待用户确认,执行步骤A20 ; 步骤A20:所述下层COS判断是否接收到用户的确认信息,是则执行步骤A21,否则签名失败,结束; 步骤A21:所述下层COS将签名结果返回给所述中间件,执行步骤S19。
7.如权利要求6所述的方法,其特征在于,所述生成签名指令,并将所述签名指令发送给下层COS,具体包括: 步骤Pl:所述中间件判断待发送数据的长度是否大于预设长度,是则执行步骤P2,否则执行步骤P4 ;所述待发送数据为接收到的所述报文或哈希结果; 步骤P2:所述中间件按照预设长度对待发送数据进行分包,将第一个数据包作为当前数据包; 步骤P3:所述中间件根据当前数据包按照第二约定格式生成签名指令并发送给下层COS ; 步骤P4:所述中间件根据待发送数据按照第三约定格式生成签名指令并发送给所述下层COS ; 在所述步骤Al判断为第二签名指令与步骤A3之间,包括: 步骤Ql:所述下层COS查找状态机的值,如找到则执行步骤Q2,如未找到则将所述状态机的值设置为第一字符串,执行步骤Q2 ; 步骤Q2:所述下层COS将解析得到的数据域部分的第一个字节作为当前解析位置;步骤Q3:所述下层COS判断状态机的值是否为第一字符串,是则执行步骤A3,否则执行步骤A12 ; 所述步骤A12中还包括将所述状态机的值置为第二字符串; 在所述步骤A3、步骤A4、步骤AS中执行步骤A17之前包括:给所述中间件返回第一信息; 在所述步骤A13判断为否与步骤A17之间,包括:给所述中间件返回第二信息; 在所述步骤Al7之前包括: 步骤Yl:所述中间件判断接收到的信息是否为第一信息,是则执行步骤Y2,否则向所述主机报错,结束; 步骤Y2:所述中间件判断待发送数据是否发送完成,是则向所述下层COS发送获取签名指令,执行步骤A17 ;否则执行步骤Y3 ; 步骤Y3:所述中间件判断下一个数据包是否为整包数据,是则将下一包数据作为当前数据包,返回步骤P3,否则将下一个数据包作为待发送数据,执行步骤P4。
8.如权利要求6所述的方法,其特征在于,所述步骤A9具体包括: 步骤A9-1:所述中间件获取所述第二显示缓存区中的第二预设字符之后的字符,并判断其是否可以转换为数字,是则执行步骤A9-2,否则执行步骤A9-3 ; 步骤A9-2:所述中间件将所述第二预设字符之后的字符转换为数字,判断转换后的数字是否在预设范围内,是则执行步骤A9-4,否则执行步骤A9-3 ; 步骤A9-3:所述中间件将所述第二存储区中的第一个元素和第二个元素置为0,删除所述第二显示缓存区中所述第二预设字符之后的字符,然后在所述第二显示缓存区中顺序存储第一设定数据,将所述报文中的第四预设字符所处字节作为当前解析位置,返回步骤A3 ; 步骤A9-4:所述中间件将所述第二预设字符之后的字符存储到所述第二存储区的相应位置上,在所述第二显示缓存区中顺序存入第一设定数据,将所述报文中的第四预设字符所处字节作为当前解析位置,返回步骤A3。
9.如权利要求6所述的方法,其特征在于,所述步骤AlO具体包括: 步骤A10-1:所述中间件判断所述报文中当前解析位置的下一个字节数据是否为所述第五预设字符,是则执行步骤A12,否则执行步骤A10-2 ; 步骤A10-2:所述中间件判断所述报文中当前解析位置的下一个字节数据是否为字符,是执行步骤All,否则返回步骤A3。
10.如权利要求1所述的方法,其特征在于,所述步骤SI判断所述报文是否为原文之前,包括: 所述中间件将接收到的主机下发的报文存储到第一解析缓存区中。
11.如权利要求10所述的方法,其特征在于, 如所述中间件接收到所述下层COS返回的数据为交易签名结果,则步骤S19具体包括: 所述中间件对接收到的交易签名结果使用当前私钥对应的公钥进行解密,如解密成功则根据记录的数据内容位置从所述第一解析缓存区中的报文中获取数据内容,对获取的数据内容进行哈希计算,判断哈希结果与解密结果是否相同,是则验证通过,否则验证未通过,如解密失败,则签名失败,结束。
12.如权利要求10所述的方法,其特征在于, 如所述中间件接收到所述下层COS返回的数据为普通签名结果,则步骤S19具体包括: 所述中间件对接收到的签名结果进行解密,如解密成功则对所述第一解析缓存区中的原文进行哈希计算,判断哈希结果与解密结果是否相同,是则验证通过,否则验证未通过,如解密失败,则签名失败,结束。
13.如权利要求1所述的方法,其特征在于,所述步骤S9具体包括: 步骤S9-1:所述中间件判断所述报文中当前解析位置的下一个字节数据是否为所述第五预设字符,是则执行步骤S11,否则执行步骤S9-2 ; 步骤S9-2:所述中间件判断所述报文中当前解析位置的下一个字节数据是否为字符,是执行步骤S10,否则返回步骤S2。
【文档编号】H04L29/06GK104519063SQ201410790383
【公开日】2015年4月15日 申请日期:2014年12月17日 优先权日:2014年12月17日
【发明者】陆舟, 于华章 申请人:飞天诚信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1