一种应用于数据校验的哈希算法的制作方法

文档序号:15845073发布日期:2018-11-07 08:54阅读:486来源:国知局
一种应用于数据校验的哈希算法的制作方法

本发明涉及网络安全技术领域,具体为一种应用于数据校验的哈希算法。

背景技术

哈希算法将任意长度数据块映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值,哈希值是该数据块的一种紧凑的数值表示形式。只要更改数据块的任何字节,都会产生不同的哈希值,找到同一散列值的不同输入,在计算上是几乎是不可能的。因此,哈希算法在计算机数据处理上有广泛的应用,使用数据哈希值可以检验数据的完整性、进行数据快速查找、与数据加密算法结合构造安全的数据结构等应用。当前比较常见的哈希算法有md5、sha-1、bkdrhash、aphash等等,其通过加减法、位运算、乘法除法、查表、混合实现等方式实现,不同的实现方式在运行速度和哈希效果上有所差异。

现有的物联网技术领域中,在内网、外网以及两个网络之间的存在着大量而频繁的数据的传输、存储等操作,在数据的传输存储等过程中,都需要对数据进行校验,现在需要一种更加快速的算法能够适应物联网通信领域中大量而频繁的数据校验需求。



技术实现要素:

为了能够实现更加快速的数据校验,本发明提供了一种应用于数据校验的哈希算法,其结构简单,运算速度快,可以使用各种编程语言来实现该算法。

本发明技术方案为:其特征在于其包括以下步骤:

步骤1、读入需要进行数据校验操作的原始待处理数据;

步骤2、指定一个二进制形式数据的位数l作为指定字长,将待处理数据按照所述指定字长l从高位到低位进行分组,并保存各组数据;

步骤3、使用黄金分割参数设置哈希码的初始值i,所述黄金分割参数为:0.618,所述初始值i的设置方法包括如下步骤:

(1)计算所述指定字长l能表达的最大无符号整数与所述黄金分割参数的乘积:

(2)对步骤(1)中得到的乘积做取整运算,把乘积的整数部分赋值为哈希码的所述初始值i;

步骤4、使用所述黄金分割参数设置哈希码的位移数n;

步骤5、将当前的哈希码按照步骤4得到的所述位移数n进行循环左移后,与现存的数据组中最高位的那组的数据相加,产生新的哈希码;第一次进行循环左移运算的时候,哈希码使用步骤3中得到的所述初始值i;

步骤6、删除在所述步骤5中参与过运算的当前最高位的那组数据;

步骤7、重复所述步骤5和所述步骤6直至所述步骤1中保存的分组数据都删除完毕,所得哈希码为最终的校验值,采用所述校验值进行数据校验。

其进一步特征为:

所述步骤2中将待处理数据进行所述分组时,如果所述待处理数据的二进制形式的位数不是所述指定字长l的整数倍数,则需要填充数据,使之成为指定字长的整数倍数,所述填充数据方法为:

(ⅰ)在所述待处理数据尾部填充特定数据的二进制形式,所述特定数据以为0xa为起点,其具体形式为:

0xa1b3c5d7e9f1a3b5c7d9e1f3

(ⅱ)从所述待处理数据的起点开始依次取出数据,每次取出一位,填入所述待处理数据尾部,直至填充后的待处理数据的二进制形式的位数为所述指定字长l的整数倍数;

所述步骤4中所述设置哈希码的位移数n的方法包括如下步骤:

a、通过所述黄金分割参数与所述指定字长l进行运算,计算出一个中间值:

中间值=l*(1-0.618)

b、对步骤a中得到的所述中间值做取整运算;

c、如果中间值的整数部分是奇数,则将整数部分赋值为所述设置哈希码的位移数n,如果中间值的整数部分是偶数,则加1后赋值为所述设置哈希码的位移数n。

本发明提供的一种应用于数据校验的哈希算法,其采用循环移位和加法构造而成,循环移位数根据黄金分割比例计算出,在保证了哈希码的安全性以及降低了重复率的基础之上,能够更快速的实现数据校验中的校验码计算,且因为其实现步骤的逻辑结构简单,理解容易,适用于各种程序语言的实现。

附图说明

图1为算法流程图;

图2为哈希码初始值的设置流程图;

图3为位移数的设置流程图。

具体实施方式

如图1~图3所示,本发明包括以下步骤:

步骤1、读入需要进行数据校验操作的原始待处理数据。

步骤2、指定一个二进制形式的数据的位数l作为指定字长,将待处理数据按照指定字长l从高位到低位进行分组,并保存各组数据;以指定字长l为32为例,对待处理数据进行分组并保存,每32位为一组;如果待处理数据的位数不是指定字长l的整数倍数,则需要对剩余的不足32位的数据进行填充,填充方法为:

(ⅰ)在待处理数据尾部填充特定数据的二进制形式,特定数据以为0xa为起点,具体形式为:

0xa1b3c5d7e9f1a3b5c7d9e1f3

(ⅱ)从待处理数据的起点开始依次取出数据,每次取出一位,填入待处理数据尾部,直至填充后的待处理数据的二进制位数为指定字长l的整数倍数;

如待处理数据为“123456789012345(0x7048860ddf79)”,其二进制位表达为:

011100000100100010000110000011011101111101111001

按照指定字长l为32进行分组,则可分为两组,第一组为0x7048860d,二进制形式表达为:

01110000010010001000011000001101

第二组为oxdf79,二进制表达形式为:

1101111101111001

第二组不足32位,则需要进行数据填充,填充数据的时候以0xa为起点,依次填充后续数据直至满32位,则得到的数据为:

11011111011110011010000110110011

即填充的数据为0xa1b3,最后一组数据最终为0xdf79a1b3。

步骤3、使用黄金分割参数设置哈希码的初始值i,黄金分割参数为:0.618,初始值i的设置方法包括如下步骤:

(1)计算指定字长l能表达的最大无符号整数与黄金分割参数的乘积:

(2)对步骤(1)中得到的乘积取整,把乘积的整数部分赋值为设置哈希码的初始值i;

当l为32的时候,32位最大无符号整数为4294967295(0xffffffff),其与黄金分割参数的乘积为2654289788.310,对此数值做取整运算为2654289788,即当l为32的时候,哈希码的初始值i为2654289788。

步骤4、使用黄金分割参数设置哈希码的位移数n;设置哈希码的位移数n的方法包括如下步骤:

a、通过黄金分割参数与指定字长l进行运算,计算出一个中间值:

中间值=l*(1-0.618)

b、对步骤a中得到的中间值做取整运算;

c、如果中间值的整数部分是奇数,则将整数部分赋值为设置哈希码的位移数n,如果中间值的整数部分是偶数,则加1后赋值为设置哈希码的位移数n;

当l为32的时候,中间值计算后为32*(1-0.618)=12.224;

取整中间值后所得为12,12为偶数,则需加1后赋值给位移数,即n为13。

步骤5、将当前的哈希码按照步骤4得到的位移数n进行循环左移后,与现存的数据组中最高位的那组的数据相加,产生新的哈希码;第一次进行循环左移运算的时候,哈希码使用步骤3中得到的初始值i;

第一次计算使用的当前哈希码为初始值i,在步骤3中得到的初始值i为:2654289788,其二进制表示为:

10011110001101010011111101111100

当前位移数n为13,需要把初始值循环左移13位,即把高位13位数字循环移动到低位13位,

←1001111000110←1010011111101111100

则循环左移后所得为:

10100111111011111001001111000110

把位移后的数据与现存的数据组中最高位的那组的数据相加,产生新的哈希码。

步骤6、删除在步骤5中参与过运算的当前最高位的那组数据,剩余的分组数据继续参与后续运算。

步骤7、重复步骤5和步骤6直至步骤1中保存的分组数据都删除完毕,所得哈希码为最终的校验值,采用校验值进行数据校验。

本发明提出的一种应用于数据校验的哈希算法,与现有技术中的bkdrhash算法相比,针对10个字长块计算1亿次,本发明的效率比bkdrhash算法快4%;针对128m字节数据库计算100次,本发明的算法效率比bkdrhash快11%左右;通过本发明的技术方案,可以提供更快速的数据校验,且本算法逻辑结构简单,易于理解,更适用于没有固定开发模式的物联网开发环境。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1