hashlib和hmac都可以进行加盐的md5加密,即使是相同的盐和数据,加密出来的结果是不一样的哦! 加密的内容必须是字节!
import hmac import hashlib print(hashlib.md5(b"hello world").hexdigest()) print(hmac.new(b"hello", b" world", "md5").hexdigest())
5eb63bbbe01eeed093cb22bb8f5acdc3 8e726a0009d7f8adf36bb9294916ce43
盐和要加密的数据拼接后再加密
import hashlib obj = hashlib.md5(b"1") obj.update(b"23") md5_str = obj.hexdigest() print(md5_str)
202cb962ac59075b964b07152d234b70
import hashlib
obj = hashlib.md5()
obj.update(b"123")
md5_str = obj.hexdigest()
print(md5_str)
202cb962ac59075b964b07152d234b70
上面的代码可以简写为:
import hashlib obj = hashlib.md5(b"123") md5_str = obj.hexdigest() print(md5_str)
202cb962ac59075b964b07152d234b70
总结:通过上面的三个实例可以看出,盐越复杂越好,虽然md5无法解密,但是有撞库的情况,库里的历史数据一旦匹配到,就不安全了。
import hashlib md5_obj = hashlib.md5(b'1') md5_obj.update(b'23') print(md5_obj.hexdigest()) print(hashlib.md5(b'123').hexdigest())
202cb962ac59075b964b07152d234b70 202cb962ac59075b964b07152d234b70
import hashlib '''模拟注册登录''' def my_md5(s): '''md5加密''' obj = hashlib.md5("猜猜看".encode("utf-8")) obj.update(s.encode("utf-8")) return obj.hexdigest() def register(): '''注册''' global username global password name = input("Username:").strip() pwd = input("Password:").strip() md5_pass = my_md5(pwd) username = name password = md5_pass def login(): '''登录''' name = input("Username:").strip() pwd = input("Password:").strip() md5_pass = my_md5(pwd) if username == name and password == md5_pass: print("登录成功") else: print("登录失败") username = "" password = "" register() login()
Username:lily Password:123 Username:lily Password:123 登录成功
import hashlib def file_verify(file): '''获取文件内容的md5值,用于验证文件内容的一致性''' obj = hashlib.md5(b'893894839((****()))') with open(file, "rb") as f: for line in f: obj.update(line) return obj.hexdigest() file_md5 = file_verify("a.txt") print(file_md5)
7c5c4e94831aa25142af2d77d5b91b27
# 模拟一个安装程序 with open("安装包.exe", "w", encoding="utf-8") as f: f.write("这一行数据。 ") f.write("这二行数据。 ") f.write("这三行数据。 ") def file_verify(file): '''获取文件内容的md5值,用于验证文件内容的一致性''' obj = hashlib.md5(b'893894839((****()))') with open(file, "rb") as f: for line in f: obj.update(line) return obj.hexdigest() # 验证文件的一致性,首先获取文件内容的md5值 print(file_verify("安装包.exe"))
bd94ae589956a0028c1995992582d365
import hashlib # 比如我修改下文件内容 with open("安装包.exe", "a", encoding="utf-8") as f: f.write("。。。 ") # 重新获取文件内容的md5值 print(file_verify("安装包.exe"))
d87f3c36c7985a211a1dc0bc6ab37a18
模拟的安装包,一旦被修改,md5值就会发生变化。