hash 算法计算过程
MD5(128位) ,sha1(160),sha256(256位) 都是用户hash算法,任意长度的字符串 通过哈希运算以后都会得到一个固定长度的摘要,并且其中任意一个字符的变动都会导致hash完全改变。
用sha1举例:sha1 要求 原文长度低于2^64次方位(很大了,4G 内存是 512M 的内存是 2^32次方位 )
1 把原文对齐,第一位补1,后面补0,最后原文的长度(64位二进制表示的长度),使它是512的N倍。
2然后把512位小段分成 16*32 段。
3在把这16小段扩充成80*32的小段。
扩充过程:前16 位就用原来的16个
W16-W79 使用公式计算,Wt=( W(t-3) ~ W(t-8)~W(t-14)~W(t-16) )<<1 ,t表示第几位,~表示异或 ,<<1 表示左移一位
4然后把进行80轮的运算得到160位的哈希值。如果是上面的N=1,那么就是最后的结果,如果不是那就就把这个哈希值带到第二段去计算,知道最后一段输出160位的哈希为最终的结果。
80轮运算过程:
1,有5个8位16进制的初始变量,a,b,c,d,e,加起来就是一个160位的初始哈希。
2, 80轮运算的过程
for t=0-79
T=a<<5+f(a,c,d)(这个函数是通过不同的t值来决定运算公式)+e+Kt(根据t的区间取得常量值)+Wt
e=d
d=c
c=b<<30
b=a
a=T
3,计算玩80轮运算以后的到的 a,b,c,d,e 连起来就就是一个160位IDE哈希,如果N >1 ,那么继续下一个512 区间的计算,直到最后一个
上面的有个很明显的abcde 用的固定值,如果abcde 是用户自定义数据生成的,那么摘要算法要通过大数据索引的方式查找原文就变得几乎不可能了,这就是哈希函数加盐
能耍的时候就一定要耍,不能耍的时候一定要学。
--天道酬勤,贵在坚持posted on 2022-04-27 22:28 zhangyukun 阅读(1374) 评论(0) 编辑 收藏 举报