Python基础-hashlib模块

一、hashlib模块

1.概述

(1)hashlib提供了常见的摘要算法,如MD5、SHA1等等

(2)摘要算法:又称为哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)

2.常用的方法

(1)md5()/sha1():创建一个md5或者sha1加密模式的hash对象

(2)update(arg):用字符串参数来更新hash对象,如果同一个hash对象重复调用该方法

如:m.update(a);m.update(b)   则等于 m.update(a+b)

(3)digest():返回摘要,作为二进制数据字符串值

(4)hexdigest():返回摘要,作为十六进制数据字符串值

(5)copy():复制

3.常用的属性

(1)algorithms:列出所有加密算法

(2)digest_size:产生散列的字节大小

4、md5/shar1示例

(1)计算出一个字符串的MD5值

①代码

import hashlib

md5_ = hashlib.md5()  # 创建一个md5对象(md5_)
md5_1 = hashlib.md5()  # 创建一个md5对象(md5_1)
md5_2 = hashlib.md5()  # 创建一个md5对象(md5_2)

md5_.update("suner yao hao hao xue xi".encode())
print("md5_的字符串值:", md5_.hexdigest())

md5_1.update("123456".encode())
print("md5_1的字符串值:", md5_1.hexdigest())

# 数据量很大,可以分块多次调用update()
md5_2.update("suner".encode())
md5_2.update("hao hao xue xi".encode())
print("md5_2的字符串值:", md5_2.hexdigest())

②结果

(2)计算出一个字符串的SHA1值,与MD5一致

①代码

import hashlib

sha1_= hashlib.sha1()  # 创建一个sha1对象(sha1_)
sha1_1 = hashlib.sha1()  # 创建一个sha1对象(sha1_1)
sha1_2 = hashlib.sha1()  # 创建一个sha1对象(sha1_2)

sha1_.update("suner yao hao hao xue xi".encode())
print("sha1_的字符串值:", sha1_.hexdigest())

sha1_1.update("123456".encode())
print("sha1_1的字符串值:", sha1_1.hexdigest())

# 数据量很大,可以分块多次调用update()
sha1_2.update("suner".encode())
sha1_2.update("hao hao xue xi".encode())
print("sha1_2的字符串值:", sha1_2.hexdigest())

②结果

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

三、摘要算法

1.应用场景(常用例子)

任何允许用户登录的网站都会存储用户登录的用户名和口令。方法是存放数据库表中

口令(比如密码)如果以铭文保存,一旦数据库泄露,信息就全部泄露了

2.用户登录示例

(1)代码

import hashlib

user_info = {"name":"suner", "password":"e10adc3949ba59abbe56e057f20f883e"}
class User_login():
    def __init__(self,name,password):
        self.name = name
        self.password = password

    def login(self):
        md5_ = hashlib.md5()  # 创建一个md5对象
        md5_.update(self.password.encode("utf-8"))
        password = md5_.hexdigest()  # 转为字符串显示
        if self.name == user_info["name"] and user_info["password"] == password: # 判断用户名和密码都正确才算成功
            print("登录成功")
        else:
            print("密码或账号有误")

if __name__ == '__main__':
    name = input("请输入用户名:")
    password = input("请输入密码:")
    user_login = User_login(name, password)
    user_login.login()

(2)结果

猜你喜欢

转载自blog.csdn.net/qq_39620483/article/details/88048944