Hash算法(含python实现)
1. 简介
哈希(hash)也翻译作散列。Hash算法,是将⼀个不定长的输⼊,通过散列函数变换成⼀个定长的输出,即散列值。
这种散列变换是⼀种单向运算,具有不可逆性即不能根据散列值还原出输⼊信息,因此严格意义上讲Hash算法是⼀种消息摘要算法,不是⼀种加密算法。常见的hash算法有:SM3、MD5、SHA-1等。
2. 应⽤
Hash主要应⽤在数据结构以及密码学领域。
在不同的应⽤场景下,hash函数的选择也会有所侧重。⽐如在管理数据结构时,主要要考虑运算的快速性,并且要保证hash均匀分布;⽽应⽤在密码学中就要优先考虑抗碰撞性,避免出现两段不同明⽂hash值相同的情况发⽣。
2.1 在密码学领域的应⽤
matlab的安装与调试
在密码学中,Hash算法的作⽤主要是⽤于消息摘要和签名,换句话说,它主要⽤于对整个消息的完整性进⾏校验。⽐如⼀些登陆⽹站并不会直接明⽂存储⽤户密码,存储的是经过hash处理的密码的摘要(hash值),当⽤户登录时只需要对⽐输⼊明⽂的摘要与数据库存储的摘要是否相同;即使⿊客⼊侵或者维护⼈员访问数据库也⽆法获取⽤户的密码明⽂,⼤⼤提⾼了安全性。
2.2 在数据结构中的应⽤
使⽤Hash算法的数据结构叫做哈希表,也叫散列表,主要是为了提⾼查询的效率。它通过把关键码值映射到表中⼀个位置来访问记录,以加快查的速度。这个映射函数就是hash函数,存放记录的数组叫做哈希表。在数据结构中应⽤时,有时需要较⾼的运算速度⽽弱化考虑抗碰撞性,可以使⽤⾃⼰构建的哈希函数。
3. Hash算法的python实现
3.1 ⾃定义哈希函数python基础代码大全黑客
⾃定义哈希函数通常可利⽤除留余数、移位、循环哈希、平⽅取中等⽅法。下⾯这个例⼦就是我⾃⼰定义的⼀个哈希函数,运⽤了取模运算和异或运算。
# coding:utf-8
# ⾃定义哈希函数
mysql server和mysql区别def my_hash(x):
return (x % 7) ^ 2
print(my_hash(1)) # 输出结果:3
php5和php7的语法区别
print(my_hash(2)) # 输出结果:0
print(my_hash(3)) # 输出结果:1
print(my_hash(4)) # 输出结果:6
3.2 hash()函数
在python中有内置的哈希函数hash(),返回⼀个对象(数字、字符串,不能直接⽤于 list、set、dictionary)的哈希值。⽰例代码如下:
# coding:utf-8
# hash()
print(hash(1))
print(hash(1.0))    # 相同的数值,不同类型,哈希值是⼀样的
print(hash("abc"))
shelly佳微博>eclipse中文新手使用教程print(hash("hello world"))
在运⾏时发现了⼀个现象:相同字符串在同⼀次运⾏时的哈希值是相同的,但是不同次运⾏的哈希值不同。这是由于Python的字符串hash 算法有⼀个启动时随机⽣成secret prefix/suffix的机制,存在随机化现象:对同⼀个字符串输⼊,不同解释器进程得到的hash结果可能不同。因此当需要做可重现可跨进程保持⼀致性的hash,需要⽤到hashlib模块。
3.3 hashlib模块
hashlib提供了常见的摘要算法,如MD5,SHA1等等。⽰例代码如下:
# coding:utf-8
# 使⽤hashlib模块
import hashlib
md5 = hashlib.md5()    # 应⽤MD5算法data = "hello world"
md5.de('utf-8'))
print(md5.hexdigest())

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。