主权项 |
一种数据散列获取方法,其特征在于,包括以下步骤:将待处理数据序列进行数据填充至预定字长,获得数据字序列;将所述数据字序列划分为至少一个子序列,其中,每一所述子序列包括多个数据字;对所述数据字序列执行如下的多轮迭代:for i=0to nb‑1; <mrow> <mi>S</mi> <mo>←</mo> <mi>S</mi> <mo>⊕</mo> <mi>FI</mi> <mrow> <mo>(</mo> <msub> <mi>p</mi> <mrow> <mn>16</mn> <mi>i</mi> </mrow> </msub> <mo>,</mo> <msub> <mi>p</mi> <mrow> <mn>16</mn> <mi>i</mi> <mo>+</mo> <mn>1</mn> </mrow> </msub> <mo>,</mo> <msub> <mi>p</mi> <mrow> <mn>16</mn> <mi>i</mi> <mo>+</mo> <mn>2</mn> </mrow> </msub> <mo>,</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mo>,</mo> <msub> <mi>p</mi> <mrow> <mn>16</mn> <mi>i</mi> <mo>+</mo> <mn>15</mn> </mrow> </msub> <mo>)</mo> </mrow> <mo>;</mo> </mrow>S←R(S);其中,i+1为迭代轮数,nb为所述数据字序列包含的子序列的个数,S为每一轮迭代中各个所述子序列的中间值,S的初始值为0,{p16i,p16i+1,p16i+2,…,p16i+15}为第i+1个子序列;FI为注入函数,用于对所述第i+1个子序列执行以下操作:将所述子序列作为循环序列,采用基于线性反馈变换的附加式发生器,按字步进地对其中的每个数据字执行线性反馈变换;R(S)为轮函数,用于对所述第i+1个子序列执行以下操作:将所述子序列作为一个循环序列,采用基于非线性反馈变换的附加式发生器,按字步进地对其中的每个数据字执行非线性反馈变换;对所述子序列包含的数据字,进行按位步进的循环移位变换;再将所述子序列作为循环序列,采用基于线性反馈变换的附加式发生器,按字步进地对其中的每个数据字执行线性反馈变换;根据变换后获得的中间值S提取部分数据字,组成数据散列值。 |