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')