zoukankan      html  css  js  c++  java
  • 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值就会发生变化。
  • 相关阅读:
    jenkins GitHub 自动触发
    rabbitmq web管理
    系统编码,文件编码,python编码
    反转二叉树
    从右边看二叉树
    python pyenv
    js 闭包
    git review & devops过程
    centos7搭建自己的yum源
    优先级队列PriorityQueue 测试,会自动排序
  • 原文地址:https://www.cnblogs.com/lilyxiaoyy/p/10949001.html
Copyright © 2011-2022 走看看