python hashlib sha1和MD5哈希算法

来源:互联网 发布:阿里云cdn如何配置 编辑:程序博客网 时间:2024/05/18 05:58

python hashlib库提供了常用的哈希算法。

如MD5 SHA1 等

今天我们开坑sha1

举个例子,你写了一篇文章,内容是一个字符串’how to use python hashlib - by Michael’,并附上这篇文章的摘要是’2d73d4f15c0db7f5ecb321b6a65e5d6d’。如果有人篡改了你的文章,并发表为’how to use python hashlib - by Bob’,你可以一下子指出Bob篡改了你的文章,因为根据’how to use python hashlib - by Bob’计算出的摘要不同于原始文章的摘要。

可见,摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。

摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

所以哈希算法基本上说很难可逆。

import hashlibsha1 = hashlib.sha1()sha1.update('how to use sha1 in ')sha1.update('python hashlib?')print sha1.hexdigest()
md5 = hashlib.md5()md5.update('how to use md5 in ')md5.update('python hashlib?')print md5.hexdigest()

md5生成一个128bit的结果,通常用32位的16进制字符串表示
sha1生成一个160bit的结果,通常用40位的16进制字符串表示

SHA256和SHA512,不过越安全的算法越慢,而且摘要长度更长

注意:哈希算法又称为摘要算法,它生成的是固定长度的不可逆的混杂字符串。不要与加密算法混为一谈,因为加密对应着解密。而哈希算法很难很难解密。

通常为了保护用户的隐私,我们不会选择直接将明文的密码存入数据库,因为一但数据库泄露,用户的个人信息将全部丢失。

通常会对密码进行MD5,SHA1等方式哈希后存入数据库。

但是这样数据库被盗后,黑客虽然不能暴力破解密码,但是黑客可以通过对用户常见密码进行哈希,用得到的值对比仍然会泄露。

这里就提到另一种方法“加盐”

我们不单单对密码进行加密,而是将密码+“特性字符串”的集合进行加密。大大增加了安全性。