# 测试散列函数功能
print(hash(233))
print(hash(234))
print(hash(235))
# 输出结果
- 1
- 2
- 3
```
- 上述的程序完成了一个散列算法所应当实现的初级目标:用较少的文本量代表很长的内容(求模之后的数字肯定小于8)。
- 但也许你已经注意到了,单纯使用求模算法计算之后的结果带有明显的规律性,这种规律将导致算法将能难保证不可逆性。所以我们将使用另外一种手段,那就是异或。在散列函数中加入一个异或过程# 构造散列函数
def hash(a):
return (a % 8) ^ 5
# 测试散列函数功能
print(hash(233))
print(hash(234))
print(hash(235))
# 输出结果
- 4
- 7
- 6
```
- 很明显的,加入一层异或过程之后,计算之后的结果规律性就不是那么明显了。
- 如果用户使用连续变化的一系列文本与计算结果相比对,就很有可能找到算法所包含的规律。在进行计算之前对原始文本进行修改,或是加入额外的运算过程(如移位)# 构造散列函数
def hash(a):
return (a + 2 + (a << 1)) % 8 ^ 5
# 测试散列函数功能
print(hash(233))
print(hash(234))
print(hash(235))
# 输出结果
- 0
- 5
- 6
```
- 这样处理得到的散列算法就很难发现其内部规律上面的算法是不是很简单?事实上,常用算法MD5和SHA1,其本质算法就是这么简单,只不过会加入更多的循环和计算,来加强散列函数的可靠性。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有