-
-
[原创]如何设计简易的抗弱碰撞哈希函数
-
发表于:
2021-11-12 13:30
30916
-
这里介绍knuth multiplicative法
公式思路如下
this_hash=( (R*last_hash).operateX( f(Magic_Num, this_block) ) ) % M
看似有点复杂,我们一步步讲,保证0基础看懂
operateX指的是某种运算,可以是加减乘除四则运算,也可以是位运算,也可以是更复杂的运算组合
这个运算的左操作数为R*last_hash
,右操作数为函数f()
的返回值
函数f
的参数:
Magic_Num
不多说,随意定的一个值就行
this_block
是本轮hash加密的加密块的内容
M
是hash表的表长
这里分为三个理解阶段,在数学上并不严谨,但对我们的理解非常有帮助
首先我们规定,待处理的原数据是长度和内容随机的字符串
字符范围为大小写字母和十个阿拉伯数字,以ASCII表示
接下来我们举一个用上面公式衍生出来的例子
本例当中略去magic_Num
第一个理解阶段:
我们先把M看作是足够大的,也就说对M的模永远等于这个数本身,同时我们把str中的每一个字符的ASCII码都看作是小于10的,同时令R为10
此时,hash值等价于原字符串的十进制形式,画图如下
第二个理解阶段:
由于ASCII值并非小于10(前面已经说了字符范围)
因此我们假设R为128(只要大于字符串当中,ASCII意义上的最大字符就行,是多少无所谓)
此时算出来的值相当于128进制的整数
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2021-11-16 00:15
被KSr01dO编辑
,原因: