Python常用内建模块之hashlib

时间:2021-12-29 22:38:19

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

Python常用内建模块之hashlib