MD5加密

1、MD5

  • 過程不可逆
  • 同一個明文的輸出值不變
  • 大多用在密碼加密上

2、加密

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

 

 3、應用

  • 在用戶註冊時,密碼經過加密保存,在用戶登陸時,用戶輸入密碼後,先經過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("用戶名或密碼錯誤")
相關文章
相關標籤/搜索