hashlib模块提供了常见的摘要算法,MD5,SHA1还有很多,对于什么是摘要算法,详细的请查阅维基百科。
其实摘要算法很好理解,它通过一个函数把任意长度的数据转换成长度固定的数据串。
好了,解释完摘要算法。我解释一下什么是MD5(Message Digest Algorithm MD5),这是一种散列函数,具体实现方式不管它,有兴趣可以查阅相关资料。这种函数可以把数据转换成固定长度。
知道了这些,那hashlib模块和MD5有什么用呢?
举个简单的例子,我们的电脑要登录就要输入用户名和密码,可是计算机是怎么知道我的用户名和密码是正确的呢?
别人要来破解,怎样保护密码不被轻易的让对方解开呢?这就可以用MD5算法进行加密
name | password
--------+----------
michael | 123456
bob | abc999
alice | alice2008
上图是明文
可是我们存储的不能是明文,容易被破解,我们需要存储摘要,比如MD5
username | password
---------+---------------------------------
michael | e10adc3949ba59abbe56e057f20f883e
bob | 878ef96e86145580c38c87f0410ad153
alice | 99b1c2188db85afee403b1536010c2c9
这样即使能访问数据库,也没办法知道明文信息。
下面程序,就是把计算机常用的用户名和密码,存储到数据库里。然后根据用户输入的用户名和密码验证是否能进入该台计算机,返回提示信息
#coding=utf-8
#__author__ = 'henry'
import hashlib
db={}
#把对应语句变成MD5
def get_md5(words):
words_md5=hashlib.md5()
words_md5.update(words)
return words_md5.hexdigest()
#计算用户名对应密码的MD5,并存储
def calc_md5(name,password):
db[name]=get_md5(password)
calc_md5('michael','123456')
calc_md5('bob','abc999')
calc_md5('alice','alice2008')
print db
#验证用户登录的函数,根据用户输入的口令是否正确,返回信息
def login(user,password):
for name in db:
if name!=user:
print '用户名错误.'
break #一定要跳出循环,必要不必要的打印输出
else:
if db[name]!=get_md5(password):
print '用户名正确,密码错误.'
break
else:
print '输入正确,已进入.'
break
#验证程序对错与否
login('asd','efrr141')
login('bob','abc999')
login('bob','1234546')