python3 hashlib和hmac

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值就会发生变化。
原文地址:https://www.cnblogs.com/lilyxiaoyy/p/10949001.html