首页
社区
课程
招聘
[原创]如何设计简易的抗弱碰撞哈希函数
发表于: 2021-11-12 13:30 31531

[原创]如何设计简易的抗弱碰撞哈希函数

2021-11-12 13:30
31531


这里介绍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值等价于原字符串的十进制形式,画图如下

IBqGaq.jpg


第二个理解阶段:

由于ASCII值并非小于10(前面已经说了字符范围)

因此我们假设R为128(只要大于字符串当中,ASCII意义上的最大字符就行,是多少无所谓)

此时算出来的值相当于128进制的整数


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2021-11-16 00:15 被KSr01dO编辑 ,原因:
收藏
免费 8
支持
分享
最新回复 (4)
雪    币: 228
活跃值: (592)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
如有任何错误,还请不吝赐教
2021-11-12 13:45
2
雪    币: 228
活跃值: (592)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
新人想要个正式会员,求波点赞收藏,万分感谢
2021-11-12 13:54
1
雪    币: 4168
活跃值: (15932)
能力值: ( LV9,RANK:710 )
在线值:
发帖
回帖
粉丝
4
加油
2021-11-12 15:11
1
雪    币: 228
活跃值: (592)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
ScUpax0s 加油
谢谢大大
2021-11-16 00:12
0
游客
登录 | 注册 方可回帖
返回
//