一、MD5
- 过程不可逆
- 同一个明文的输出值不变
- 大多用在密码加密上
二、加密
1. 不加盐
- 不加盐方式得到的密文通过撞库可破解得到明文
import hashlib # 创建md5对象 obj = hashlib.md5() # 给obj设置明文 obj.update("2018".encode("utf-8")) # 括号内容须为bytes类型 # 获取到密文 mw = obj.hexdigest() print(mw) # 84ddfb34126fc3a48ee38d7044e87276
2. 加盐
- 通过加盐方式得到的密文就很难破解了
import hashlib SALT = b"abedkfjdiurwouregjogdif" # 创建md5对象 obj = hashlib.md5(SALT) # 给obj设置明文 obj.update("2018".encode("utf-8")) # 括号内容须为bytes类型 # 获取到密文 mw = obj.hexdigest() print(mw) # a2fd1c9c7b7e697e93d9df1f6e840b8a
三、应用
- 在用户注册时,密码通过加密保存,在用户登录时,用户输入密码后,先通过md5加密成密文,再与注册时密码密文匹配
import hashlib SALT = b"abedkfjdiurwouregjogdif" def encrypt(content): obj = hashlib.md5(SALT) obj.update(content.encode("utf-8")) return obj.hexdigest() # 注册 username = input("username: ") pwd = input("password: ") pwd = encrypt(pwd) # a2fd1c9c7b7e697e93d9df1f6e840b8a uname = "Tom" upwd = "a2fd1c9c7b7e697e93d9df1f6e840b8a" # 登录 username_info = input("username: ") pwd_info = input("password: ") if username_info == uname and upwd == encrypt(pwd_info): print("登录成功") else: print("用户名或密码错误")