具体实施方式
为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
首先对本说明书实施例中所涉及的中心化下的块链式的账本予以说明。在中心化的数据库服务提供方,块链式的账本通过如下方式生成,如图1所示,图1为本说明书实施例所提供的一种生成块链式账本的流程示意图,包括:
S101,接收包含指定标识字段的待存储的数据记录,确定各数据记录的哈希值,所述指定标识字段用于标识所述数据记录的业务属性。
此处的待存储的数据记录,可以是客户端个人用户的各种消费记录,也可以是应用服务器基于用户的指令,在执行业务逻辑时产生的业务结果、中间状态以及操作记录等等。具体的业务场景可以包括消费记录、审计日志、供应链条、政府监管记录、医疗记录等等。
在每个与数据库服务方对接的机构中,所述业务属性在所述对接机构中,一般而言是唯一存在的,业务属性基于不同的业务场景,可以包括用户名、用户身份证号、驾照编号、手机号、项目唯一编号等等。
例如,对于第三方支付机构而言,数据记录是用户的消费记录,此时的业务属性即为用户标识(包括手机号、身份证号、用户名等等),或者对该用户标识进行哈希算法所得到的哈希值;或者,对于政府机构而言,数据记录为多个公共项目的开销流水,则此时的业务属性可以为每个项目的唯一编号。
指定标识字段的具体位置以及获取方式可以是数据库服务方和对接机构事先协商。例如,对接机构所提供的数据记录为标准结构化的数据记录时,指定标识字段可以从数据记录中指定偏移量获取,或者由特定字符标识起始位置和结束位置;又或者,对接机构所提供的数据记录为非结构化的数据时,在对接机构上传时可以直接在每条数据记录的开头拼接上包含业务属性的头部,数据库服务方可以直接从头部获取每条数据记录的指定标识字段。
S103,当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块。
所述预设的成块条件包括:待存储的数据记录数量达到数量阈值,例如,每接收到一千条数据记录时,生成一个新数据块,将一千条数据记录写入块中;或者,距离上一次成块时刻的时间间隔达到时间阈值,例如,每隔5分钟,生成一个新数据块,将在这5分钟内接收到的数据记录写入块中。
此处的N指的是数据块的序号,换言之,在本说明书实施例中,数据块是以块链的形式,基于成块时间的顺序先后排列,具有很强的时序特征。其中,数据块的块高基于成块时间的先后顺序单调递增。块高可以是序号,此时第N个数据块的块高即为N;块高也可以其它方式生成,例如,基于数据块的成块时间戳对称加密得到的大整型数据(一般为单调递增的12至15位整型数据),例如,一个13位的大整数。由于大整型是基于时间对称加密得到的,从而在需要数据块的成块时间时,可以同样的对称解密获得成块时间。
例如,对于成块时间“20xx-01-19 03:14:07.938576”,在经过对称加密之后,可以转换为一个大整型“1547838847938”,由于整型数据随时间单调递增,因此,“1547838847938”,此时即可以做为该数据块的块高,用于标识该数据块。
在本说明书,块高基于成块时间单调递增,这样即使采用了大整型数据,但是它们之间的仍然从小到大地,反映了各数据块之间的顺序。例如,若接下来一个数据块的成块时间为“20xx-01-19 03:16:07.235125”,则可以采用预设的对称加密算法将其转换为另一更大的大整型“1547838848125”。
当N=1时,即此时的数据块为为初始数据块。初始数据块的哈希值和块高基于预设方式给定。例如,初始数据块中不包含数据记录,哈希值则为任一给定的哈希值,块高blknum=0;又例如,初始数据块的生成触发条件与其它数据块的触发条件一致,但是初始数据块的哈希值由对初始数据块中的所有内容取哈希确定。
当N>1时,由于前一数据块的内容和哈希值已经确定,则此时,可以基于前一数据块(即第N-1个数据块)的哈希值生成当前数据块(第N个数据块)的哈希值,例如,一种可行的方式为,确定每一条将要写入第N个块中的数据记录的哈希值,按照在块中的排列顺序,生成一个默克尔树,将默克尔树的根哈希值和前一数据块的哈希值拼接在一起,再次采用哈希算法,生成当前块的哈希值。又例如,还可以按照块中数据记录的顺序进行拼接并取哈希得到整体数据记录的哈希值,拼接前一数据块的哈希值和整体数据记录的哈希值,并对拼接得到的字串进行哈希运算,生成数据块的哈希值。
在每一个数据块中,其包含用于存储元数据的块头,和,用于存储数据记录的块体。数据块中的块头可以用于存储诸如父哈希、自身的块哈希值、版本号、数据记录的根哈希、时间戳等等。如图2所示,图2为本说明书实施例所提供的一种关于块头的示意图,当然,块头的格式是可以基于业务需要进行自定义的,其还可以包含一些其它的信息,例如,用于描述数据记录状态的状态数组等等,而块体中则用于存储数据记录的明文或者数据记录的哈希值。
通过前述的数据块的生成方式,每一个数据块通过哈希值确定,数据块的哈希值由数据块中的数据记录的内容、顺序以及前一数据块的哈希值决定。用户可以随时基于数据块的哈希值发起验证,对于数据块中任何内容(包括对于数据块中数据记录内容或者顺序的修改)的修改都会造成在验证时计算得到的数据块的哈希值和数据块生成时的哈希值不一致,而导致验证失败,从而实现了中心化下的不可篡改。
需要说明的是,上述数据块的生成可以是在数据库系统中的协调节点中实现,也可以不是在协调节点中实现。例如,数据系统中还可以包含其他业务节点,专门用于处理数据块的生成,以实现和存储的业务解耦,每生成一个数据块,即由业务节点发送至协调节点进行存储。
在数据库系统中的协调节点获取到数据块之后,则需要对该数据块进行存储。在本说明书实施例中,采用的存储方式是将同一个账本中的多个数据块分散的存储在多个数据节点中,以适应块链式账本的快速增长,降低单一存储设备的存储压力。如图3所示,图3是本说明书实施例提供的应用于数据库系统中的一种数据存储方法的流程示意图,该流程具体包括如下步骤:
S301,协调节点获取已经生成的数据块,根据所述数据块的块哈希值确定所述数据块所对应的数据节点,将所述数据块分配至相应的数据节点,建立所述数据块和数据节点的路由信息,保存所述路由信息和数据块的块头信息。
在数据库系统中,一般存在多个数据节点。为此,协调节点首先需要确定一个数据块应该分配至哪一个数据节点。具体而言,可以根据数据块的哈希值进行分配。
如前所述,数据块的哈希值可以根据父哈希和自身数据记录的哈希联合计算得到的,并存储在块头中。哈希值(hash values)是使用哈希函数(hash function)计算得到的值,支持的算法包括:MACTripleDES、MD5、RIPEMD160、SHA1、SHA256、SHA384、SHA512等等,总之,一个数据块的块哈希值是一段较短的字符串,可以唯一的标识该数据块,数据块中任何内容的些微改动都会造成数据块哈希值的很大变化。
而数据节点一般而言个数是固定的,每个数据节点可以有一个相应的编号。因此,可以将哈希值转换为对应的数值,并对数据节点的数量进行取模计算,因此,可以根据取模的结果确定所述数据块所对应的数据节点。
例如,一个数据块的块哈希值进行数值转换后为100110120,数据节点共有10个,编号分别从0至9,则可知块哈希值对于取模的结果为0,则可以确定0号树节点为该块哈希值所对应的数据节点,可以将该数据块发送至0号数据节点进行存储。
由于数据块的块哈希值一般有几百位(位数基于哈希算法确定),因此,还可以从块哈希值中选取指定的若干位(例如,最后3位)进行数值转换,以进行取模运算从而确定该数据块所对应的数据节点,从而可以降低计算量。
又例如,还可以将所有的数据节点排列在收尾相接的哈希环上,例如,从0至2^32大小的哈希环上。而每个数据节点可以根据自身的地址或者设备标识所对应的哈希值被定位至哈希环上的某个点。每个块哈希值可以基于同样的原理被被定位至哈希环上的某个位置,从而可以顺时针或者逆时针时间的找到最先遇到的数据节点为该块哈希值所对应的数据节点。
在确定了一个数据块所对应的数据节点之后,即可以建立一条关于该数据块的路由信息,并写入协调节点中的路由表。具体而言,一个路由表可以包含有数据块块高、数据块的块哈希、数据块对应的数据节点编号等等信息,并且存储于本地。如表1所示,表1为本说明书实施例所提供的示例性的路由表。
表1
数据块块高 |
块哈希 |
数据节点编号 |
1 |
Hash1 |
1 |
2 |
Hash2 |
2 |
300 |
Hash300 |
1 |
…… |
…… |
…… |
此外,除了保存所述路由信息外,协调节点中还应保存每一数据块的块头信息。
S303,所述数据节点接收协调节点所发送的数据块,并存储。
通过前述方案,对块链式的账本以数据块的粒度进行分布式存储,并且将块头信息等元数据保存在协调节点中,从而可以降低单一节点设备的存储压力,更为便利。
同时,由于每个数据记录中包含有业务属性,基于此,本说明书实施例提供一种数据记录的索引创建方法,应用于协调节点中,如图4所示,图4是本说明书实施例提供的一种数据记录的倒排索引创建方法的流程示意图,该流程具体包括如下步骤:
S401,获取数据记录中的指定标识字段,所述指定标识字段用于标识所述数据记录的业务属性。
指定标识字段的的具体位置以及获取方式在前文已经进行了说明,此处不再赘述。
S403,确定所述数据记录在账本中的位置信息,所述位置信息包括数据记录所处的数据块的块高,以及,在所处的数据块中的偏移量。
如前所述,一个块链式的账本由多个数据块组成,同时,一个数据块中通常包含多个数据记录。因此,在本说明书实施例中,所述的位置信息具体指的是一条数据记录被保存时,处于账本中的哪个数据块上,以及,在该数据块中的什么位置。
在本说明书实施例所提供的数据块中,可以有多种方式用来标识不同的数据块,包括数据块的哈希值或者块高。
数据块的哈希值为根据前一区块哈希值和自身数据记录进行哈希计算而得到的哈希值,可以用于唯一、明确地标识一个数据块。在块链式的账本中,通常第一个数据块其块高为0,以后每增加一个数据块,块高加1;或者,还可以将数据块的成块时间转换为一个大的单调递增整型数据(一般为12至15位)序列,作为数据块的块高。因此,一个数据块通常有一个明确的块高。
又例如,在一个已经确定的要写入数据库的数据块,其中数据记录的排序也已经固定,因此一个数据记录在该数据块中的序号也是明确的,在数据记录的长度为固定单位时,序号同样可以用于明确该数据记录在其所处的数据块中的位置信息。即,序号同样也可以用于指示偏移量。
同时,在一个数据块中,由于通常包含了多个数据记录,因此,还可以用各数据记录在该数据块中的地址偏移量来分别标识数据块中的数据记录。显而易见,在同一个数据块中,各数据记录的地址偏移量并不相同。
当然,由于在本说明书实施例所提供的方式中,数据块的具体格式是可以自定义的(例如,数据块的块头中所包含的元数据信息和备注信息,数据块的块高所采取的形式等等),在不同的格式下,位置信息的内容也会有所不同,这并不构成对本方案的限定。
S405,建立所述指定标识字段和位置信息的对应关系,写入以所述指定标识字段为主键的索引。
即,该索引是一个倒排索引。在该索引中,主键是数据记录中所包含的业务属性。具体的写入方式为,当索引中的主键不包含所述指定标识字段时,在索引表中创建以所述指定标识字段为主键的索引记录。
当所述索引中的主键包含所述指定标识字段时,将所述位置信息写入所述指定标识字段所处的索引记录。需要说明的是,此处的写入不是覆盖性的写入,而是将位置信息添加到该索引记录的值中,与其它位置信息并列存在与该索引记录中。
如表2所示,表2为本说明书实施例所提供的一种示例性索引表。其中Key即为业务属性的具体值(例如,可以是用户名),Value部分的每个数组即为一条位置信息,每个数组中的前部分块高,后部分为数据记录在该数据块中的序号,通过块高和序号即可以唯一的确定一条数据记录。容易理解,在索引表中,一个key可以对应于多个位置信息。
表2
Key |
Value |
0X123456 |
(2,08),(2,10),(300,89),(300,999) |
344X0001 |
(5,01),(8,22) |
…… |
…… |
上述倒排索引表同样存储在协调节点中。通过前述方案,在协调节点中可以得到一张关于块高和数据节点的路由表,以及,一张业务属性和数据记录位置信息(包括块高)的的倒排索引表。
基于前述方案,本说明书实施例还提供一种基于倒排索引的数据验证方法,应用于中心化存储块链式账本的数据库系统中,所述数据库系统包括协调节点和多个数据节点,如图5所示,图5为本说明书实施例所提供的一种基于倒排索引的数据验证方法的流程示意图,所述方法包括:
S501,协调节点接收包含业务属性的第一验证指令。
此处的第一验证指令可以是一个用户输入的携带有业务属性的操作指令。以key为用户名为例,例如,VERIFY(“0X123456”,&v,-1),其中的‘0X123456’即为用户输入的用户名,该操作指令指示对于用户“0X123456”在账本中的全量数据进行验证。
S503,协调节点基于预先建立的倒排索引查询获取所述业务属性所对应的数据记录的位置信息。
协调节点此时即可以从索引表表2中取得用户“0X123456”相应的数据记录的位置信息(2,08),(2,10),(300,89),(300,999),进而根据位置信息查询得到相应的数据记录。
以及,第一验证指令还可以包含相应的块高参数,由块高参数确定一段目标块高区间,例如,用户输入第一验证指令,VERIFY(0X123456,&v,200,1000),用于指定的用户0X123456在账本中的块高区间[200,1000]之间的数据记录,从而得到位置信息(300,89),(300,999)所对应的数据记录;又或者,用户输入第一验证指令,VERIFY(0X123456,&v,-1),用于指定的用户0X123456在账本中的块高区间[-1,当前最大块高]之间的数据记录(即,该用户的全量数据记录)。
S505,协调节点根据所述块高确定出对应的数据节点,发送所述位置信息和第二验证指令至确定出的数据节点。
此处的第二验证指令由协调节点和数据节点之间的通信协议确定形式,用于指示数据节点根据位置信息执行验证。例如,形式上可以是将第一验证指令进行转发,或者,也可以是只包含指示字符串“VERIFY”,又或者,也可以是一个指示字符“1”,等等。
协调节点在发送位置信息时,即可以根据路由表1确定出块高对应的数据节点,例如,在路由表1中,块高2对应于数据节点2,块高300对应于数据节点1。
协调节点在转发位置信息时,一种方式即为转发所有的位置信息至数据节点,由每个数据节点进行位置信息的筛选。例如,协调节点转发“0X123456”相应的数据记录的位置信息(2,08),(2,10),(300,89),(300,999)至数据节点2,由于数据节点中保存的数据块包括块头和块体,数据节点可以根据位置信息中的块高去进行本地查询,并进行验证,去除不位于本地数据节点的位置信息。
另一种转发方式即为,在转发之前,协调节点先做好分类,确定出应给一个数据节转发的部分位置信息。例如,由表1可知,数据块2由数据节点2保存,数据块300由数据节点1保存,因此,协调节点确定出向数据节点2发送位置信息(2,08),(2,10),同时,向数据节点1发送位置信息(300,89),(300,999)。
S507,任一接收到第二验证指令的数据节点,根据所述位置信息确定得到对应的数据块,验证确定得到的数据块的完整性,返回第二验证结果至所述协调节点。
此时,各数据节点将在本地进行数据块的完整性验证。例如,数据节点2接收到位置信息(2,08),(2,10),此时,即可以根据数据块2中的数据记录重新计算得到该数据块中的默克尔树的根哈希,将默克尔树的根哈希与块头中所保存的父数据块的哈希值联合再次计算数据块2的块哈希值,并且与块头中预先保存的数据块的哈希值进行一致性对比,若一致,则验证通过,否则验证失败。对于每一个数据块,数据节点都可以生成一个对应的第二验证结果,并且将第二验证结果返回至协调节点。
S509,协调节点汇总各数据节点所返回的第二验证结果,当全量第二验证结果均为验证通过时,确定第一验证结果为成功,否则,确定第一验证结果为失败,并返回第一验证结果至第一验证指令发送方。
容易理解,由于此时的验证是分布在各数据节点上完成的,协调节点只需汇总即可,相比于在同一设备上进行完整性验证,效率有了大幅提高。
在本申请实施例所提供的方案中,通过预先建立包含业务属性和位置信息的对应关系的倒排索引,从而可以基于第一验证指令中所包含的业务属性确定出相应的数据记录所处的数据块的块高,进而确定出数据块所存储的数据节点,从而实现在各数据节点分别对数据块进行完整性验证,并且对各数据节点的第二验证结果进行汇总,在第二验证结果均成功时确定验证成功,相比于传统的串行式验证,分布式的并行式验证提高了验证效率。
在一种实施方式中,第一验证指令还可以包含时间参数,时间参数用于指示待验证的数据块的成块时间应在时间参数所表征的时间之前。
时间参数的一种形式可以是直接的时间参数,例如,第一验证指令的形式为VERIFY((0X123456,&v,20181001),即要求获取用户“0X123456”的数据记录,并且数据记录所处的数据块的成块时间(一般就是时间戳)在在2018年10月01日之前,假设在2018年10月01日之前的最近数据块的块高为X,则目标块高区间为[1,X]。
在数据块的块高时基于时间所转换的大整型时,时间参数的另一种形式还可以是大整型数值。例如,验证指令的形式为VERIFY(0X123456,&v,1547838848300),则要求对用户“0X123456”的数据记录,并且数据记录所处的数据块的块高不超过“1547838848300”,此时目标块高区间即为[1,1547838848300]
在这种方式下,用户可以通过确定相应的时间段,进行对相关的数据记录进行验证,例如,用户可以基于自身ID(即业务属性)以及当前时间,对自身在一个月或者一天内所产生的数据记录所处的数据块进行验证验证性,通过指定的时间段之间所产生的数据记录,从可以滤除掉无关的数据块,提高验证效率。
在一种实施例中,在协调节点发送第二验证指令至数据节点之前,协调节点还可以先进行块头部分的完整性验证。具体方式即为:将查询得到的位置信息中的块高所对应的数据块均确定为待验证的数据块,按照生成顺序,针对每一数据块,根据前一数据块的块哈希(可以从前一块头中获取)和块头中所保存的本数据块的默克尔树的根哈希,生成本数据块的块哈希,并且与预先保存的块头信息中的数据块的块哈希进行对比即可。这种验证方式下,由于只需要块头的信息,因此可以只在存储有块头信息的协调节点中进行就可以。
如果块头部分的完整性验证均一致通过,再分发第二验证指令和位置信息至数据节点进行进一步的验证;否则,若任一块头的完整性验证失败,则可以认为第一验证失败,后续验证不必进行,将表征第一验证结果为失败的信息返回至验证指令发送方。
在一个实施例中,协调节点在接收数据节点所返回的对于数据块的第二验证结果之前,可以在协调节点中生成一个完整性数组,用于记录数据节点对于待验证的数据块所得到的第二验证结果。而数据节点在生成第二验证结果时,可以返回用于表征失败或者成功的特征值。例如,验证成功返回1,验证失败返回0。从而完整性数组中的元素的取值要么为1,要么为0。当完整性数组中存在任一元素取值为0时,则协调节点即可确认第一验证结果为失败,而当完整性数组中所有元素取值为1时,协调节点才确认第一验证结果为成功,通过完整性数组记录每个数据块的验证状态可以更便利的统计验证结果。
对应的,本说明书实施例还提供一种基于倒排索引的数据验证系统,应用于中心化存储块链式账本的数据库系统中,所述数据库系统包括协调节点和多个数据节点,在所述系统中,
协调节点接收包含业务属性的第一验证指令;
协调节点基于预先建立的倒排索引查询获取所述业务属性所对应的数据记录的位置信息,其中,所述倒排索引中包含业务属性和数据记录的位置信息的对应关系,所述位置信息包括数据记录所处的数据块的块高,以及,在所处的数据块中的偏移量;
协调节点根据所述块高确定出对应的数据节点,发送所述位置信息和第二验证指令至确定出的数据节点;
任一接收到第二验证指令的数据节点,根据所述位置信息确定得到对应的数据块,验证确定得到的数据块的完整性,返回第二验证结果至所述协调节点;
协调节点汇总各数据节点所返回的第二验证结果,当全量第二验证结果均为验证通过时,确定第一验证结果为成功,否则,确定第一验证结果为失败,并返回第一验证结果至第一验证指令发送方。
进一步地,在所述系统的协调节点中,所述倒排索引通过如下方式预先建立:
获取数据记录中的指定标识字段,所述指定标识字段用于标识所述数据记录的业务属性;确定所述数据记录在账本中的位置信息,所述位置信息包括数据记录所处的数据块的块高,以及,在所处的数据块中的偏移量;建立所述指定标识字段和位置信息的对应关系,写入以所述指定标识字段为主键的索引。
进一步地,在所述系统中,所述第一验证指令还包括块高参数,相应的,协调节点用于,根据块高参数确定目标块高区间,获取所述业务属性所对应的数据记录的位于目标块高区间的位置信息;相应的,所述协调节点转发所述位于目标块高区间的位置信息和第二验证指令至各数据节点。
进一步地,在所述系统中,在协调节点接收包含业务属性的第一验证指令之前,协调节点还用于获取已经生成的数据块,根据所述数据块的块哈希值确定所述数据块所对应的数据节点,将所述数据块分配至相应的数据节点,建立所述数据块和数据节点的路由信息,保存所述路由信息和数据块的块头信息;所述数据节点接收协调节点所发送的数据块,并存储。
进一步地,在所述系统中,数据块通过如下方式预先生成:
接收包含指定标识字段的待存储的数据记录,确定各数据记录的哈希值,所述指定标识字段用于标识所述数据记录的业务属性;
当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块,具体包括:
当N=1时,初始数据块的哈希值和块高基于预设方式给定;
当N>1时,根据待写入数据块中的各数据记录和第N-1个数据块的哈希值确定第N个数据块的哈希值,生成包含第N个数据块的哈希值、各数据记录和数据块的成块时间的第N个数据块,其中,数据块的块高基于成块时间的先后顺序单调递增。
进一步地,在所述系统中,协调节点还用于,根据数据记录的位置信息确定出待验证的数据块,根据协调节点中存储的块头信息,对所述待验证的数据块执行块头完整性验证。
另一方面,本说明书实施例还提供一种基于倒排索引的数据验证方法,应用于中心化存储块链式账本的数据库系统中的协调节点,如图6所示,图6为本说明书实施例所提供的应用于协调节点中的基于倒排索引的数据验证方法的流程示意图,包括:
S601,接收包含业务属性的第一验证指令;
S603,基于预先建立的倒排索引查询获取所述业务属性所对应的数据记录的位置信息,其中,所述倒排索引中包含业务属性和数据记录的位置信息的对应关系,所述位置信息包括数据记录所处的数据块的块高,以及,在所处的数据块中的偏移量;
S605,根据所述块高确定出对应的数据节点,发送所述位置信息和第二验证指令至确定出的数据节点;
S607,汇总各数据节点所返回的第二验证结果,当全量第二验证结果均为验证通过时,确定第一验证结果为成功,否则,确定第一验证结果为失败;
S609,返回第一验证结果至第一验证指令发送方。
与另一方面对应的,本说明书实施例还提供一种基于倒排索引的数据验证装置,应用于中心化存储块链式账本的数据库系统中的协调节点中,如图7所示,图7是本说明书实施例提供的一种基于倒排索引的数据验证装置的结构示意图,包括:
接收模块701,接收包含业务属性的第一验证指令;
位置查询模块703,基于预先建立的倒排索引查询获取所述业务属性所对应的数据记录的位置信息,其中,所述倒排索引中包含业务属性和数据记录的位置信息的对应关系,所述位置信息包括数据记录所处的数据块的块高,以及,在所处的数据块中的偏移量;
数据节点确定模块705,根据所述块高确定出对应的数据节点,发送所述位置信息和第二验证指令至确定出的数据节点;
汇总模块707,汇总各数据节点所返回的第二验证结果,当全量第二验证结果均为验证通过时,确定第一验证结果为成功,否则,确定第一验证结果为失败;
发送模块709,并返回第一验证结果至第一验证指令发送方。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现图6所示的数据验证方法。
图8示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现图8所示的数据验证方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的系统、方法、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的方法实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。