python模块-01-hashlib模块
hashlib模块
hashlib封装一些用户加密的类。常用方法:md5()...
**加密的目的**:用于判断和验证,并不是用来解密
**特点**:
- 把一个大的数据,切分成不同块,分别对不同的块进行加密,再汇总的结果,和直接对整体数据加密的结果是一致的。
- 单项加密,不可逆
- 原始数据小的变化,导致结果非常大的差异,''雪崩'效应```
```python
#hashlib模块
## md5加密算法:
给一个数据加密的三大步骤:
1.获取一个加密对象
2.使用加密对象的update方法,进行加密。可以多次调用update方法
3.通常通过hexdigest获取加密结果,或者digest()方法--结果是字节串
"""
"""
import hashlib
# help(hashlib) #查看模块中的相关方法
#获取一个加密对象
m = hashlib.md5()
#使用加密对象的update方法,进行加密
m.update('abc中文'.encode('utf-8'))  #字节类型
# m.update('abc'.encode('utf-8'))  #字节类型
#通过hexdigest获取加密结果
res = m.hexdigest()
# res = m.digest() #b'\x1a\xf9\x8e\x05q\xf7\xa2Dh\xa8_\x91\xb9\x08\xd35'
# print(res)  #1af98e0571f7a24468a85f91b908d335
#给一个数据加密
#验证:用另一个数据加密的结果和第一次加密的结果对比
#如果结果相同,说明原文相同;如果不同,说明原文不同
#不同加密算法,实际上就是加密结果的长度不同
s = hashlib.sha224()
s.update(b'abc')
print(len(s.hexdigest()))  # 56 * 4=224
print(len(hashlib.md5().hexdigest())) # 32 *4 =128
print(len(hashlib.sha256().hexdigest()))  #64 *4
#在创建加密对象时,可以指定参数进行加盐。称为salt
m = hashlib.md5(b'abc')
print(m.hexdigest()) #900150983cd24fb0d6963f7d28e17f72
m = hashlib.md5()
m.update(b'abc')
m.update(b'def')
print(m.hexdigest()) #e80b5017098950fc58aad83c8c14978e
m = hashlib.md5()
m.update(b'abcdef')
print(m.hexdigest()) #e80b5017098950fc58aad83c8c14978e
练习:注册 登录 的示例程序
#使用md5进行注册,登录验证 
# option= int(input("1.注册 2.登录 3.退出"))
def get_md5(username,passwd):
    m = hashlib.md5()
    m.update(username.encode('utf-8'))
    m.update(passwd.encode('utf-8'))
    return m.hexdigest()
def register(username,passwd):
    #对输入的用户密码同时进行加密
    res = get_md5(username,passwd)
    print(res)
    #写入文件
    with open('login',mode='at',encoding='utf-8') as f:
        f.write(res)
        f.write('\n')
def login(username,passwd):
    #获取当前登录信息的加密结果
    res = get_md5(username,passwd)
    #读文件,和其中的数据进行对比
    with open('login',mode='rt',encoding='utf-8') as f:
        for line in f:
            if res == line.strip():
                return  True
        else:
            return False
while 1:
    option = int(input("1.注册 2.登录 3.退出"))
    if option == 3:
        break
    if option == 1:
        username = input("输入用户名:")
        passwd = input('密码:')
        register(username,passwd)
    elif option == 2:
        username = input("输入用户名:")
        passwd = input("密码:")
        res = login(username,passwd)
        if res:
            print('登录成功!')
        else:
            print('登录失败!')
    欢迎转载,但要标明出处.否则追究.欢迎大家阅读收藏和评论,会更新很多精粹。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号