一、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("用户名或密码错误")