哈希算法

哈希算法

  • 什么是hash函数?
  • 常见的hash算法
  • hashlib的用法
  • hash算法的用途

什么是hash函数?

哈希函数,又称哈希算法,它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。

hash值的两个特性

抗碰撞能力:对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。
抗篡改能力:对于一个数据块,哪怕只改动其一个比特位,其hash值的改动也会非常大。

常用的hash算法

常见的Hash算法有MD2、MD4、MD5、SHA1、SHA256和SHA512
加密算法的效能通常可以按照算法本身的复杂程度、密钥长度(密钥越长越安全)、加解密速度等来衡量。上述的算法中,MD2速度较慢已逐渐被淘汰外,其他算法仍在目前的加密系统产品中使用。

MD5的全称是Message-Digest Algorithm 5(信息-摘要算法)。
MD5的结果是128bit字节,通常由32位16进制字符串表示。
具有很高的安全性。它对应任何字符串都可以加密成一段唯一的固定长度的代码。

SHA1的全称是Secure Hash Algorithm(安全哈希算法) 。SHA1基于MD5,加密后的数据长度更长,
它对长度小于264的输入,产生长度为160bit的散列值,比MD5多32bit,通常由40位的16进制字符串表示。
因此,比MD5更加安全,但SHA1的运算速度就比MD5要慢了。

hashlib的用法

下面以算法MD5为例,计算一个字符串的MD5值:

import hashlib

md5 = hashlib.md5()
md5.update("how to use md5 in python hashlib?")
print md5.hexdigest()   # digest的意思是摘要,hex是16进制的意思

计算结果如下:

d26a53750bc40b38b65a520292f69306

另一种常见的摘要算法是SHA1:

import hashlib

sha1 = hashlib.sha1()
sha1.update("how to use sha1 in python hashlib?")
print sha1.hexdigest()

hash算法的用途

1.加密网站注册用户的密码

在密码学中,hash算法的主要作用是用于消息摘要和签名,主要用于消息的完整性校验。
hash算法不可逆,用于密文保存密码的签名,网站后台只保存签名值。
在上述场景下,对于抗碰撞和抗篡改能力要求极高,对于速度要求在其次。

2.网站用户上传图片/文件后,计算出MD5值作为文件名

MD5可以保证唯一性。

3.key-value数据库中使用MD5作为key

在使用hash进行管理的数据结构中,比如hashmap,hash值(key)存在的目的是加速键值对的查找,key的作用是为了将元素适当的放在各个桶里,对抗碰撞的要求不是那么高。换句话说,hash出来的key,只要保证value大致均匀的放在不同的桶里就可以了。但整个算法的set性能,直接与hash值产生的速度有关,所以这时候的hash值的产生速度就尤为重要。

4.比较两个文件是否相同

大家在下载一些资源的时候,就会发现网站提供了MD5值,就是用来检测文件是否被篡改。

参考(侵删):
1.python2.7 hashlib
2.到底什么是hash? - 之幽的回答 - 知乎
3.hashlib
4.常见的加密算法有哪些?
5.在线加密解密
6.python中的MD5和SHA1加密

你可能感兴趣的:(哈希算法)