• hashlib模块


    一般用于明文加密,其实就是一个自定义的字符编码表。原来0和1转换成字符,而现在的是字符转成另一种字符

    hash是一种算法,该算法接受传入的内容,经过运算得到一串hash值。具有以下三个特点:

    • hash加密之后长度一样
    • hash加密的东西一样则哈希结果一样
    • 如果使用同一个哈希字符编码表,不断地哈希结果会累加
    import hashlib
    m = hashlib.md5()
    m.update('hello'.encode('utf8'))
    print(m.hexdigest())
    
    # 用同一个哈希字符编码表,哈希结果会不断累加
    m.update('hash'.encode('utf8'))
    print(m.hexdigest())            # 返回的是hellohash的哈希值
    
    m2 = hashlib.md5()
    m2.update('hellohash'.encode('utf8'))    
    print(m2.hexdigest())
    
    m3 = hashlib.md5()
    m3.update('hello'.encode('utf8'))        # 加密的东西一样,哈希值一样
    print(m3.hexdigest())
    
    5d41402abc4b2a76b9719d911017c592
    97fa850988687b8ceb12d773347f7712
    97fa850988687b8ceb12d773347f7712
    5d41402abc4b2a76b9719d911017c592
    

    撞库破解hash算法加密

    hash加密算法存在一定缺陷的,即可以通过撞库可以反解,如下代码所示

    # 假定它的密码一定是其中一个
    pwd_list = [
        'hash3714',
        'hash1313',
        'hash94139413',
        'hash123456',
        '123456hash',
        'h123ash',
    ]
    
    def break_pwd(hash_pwd):
        for pwd in pwd_list:
            m = hashlib.md5()
            m.update(pwd.encode('utf8'))
            if m.hexdigest()  == hash_pwd:
                return pwd
            
    if __name__ == '__main__':
        # 密码hash后的值
        hash_pwd = '0562b36c3c5a3925dbe3c4d32a4f2ba2'
        pwd = break_pwd(hash_pwd)
        print('这个用户的密码是:', pwd)
    
    这个用户的密码是: hash123456
    

    为了防止密码被撞库,我们可以使用python中的另一hmac模块,它内部对我们创建key和内容做过某种处理后再加密。如果要保证hmac模块最终结果一致,必须保证:

    • hmac.new括号内指定的初始key一样
    • 无论update多少次,校验的内容累加到一起是一样的内容
    import hmac
    h1 = hmac.new(b'123')
    h1.update(b'hello')
    h1.update(b'world')
    print(h1.hexdigest())
    
    h2 = hmac.new(b'123')
    h2.update(b'helloworld')
    print(h2.hexdigest())
    
    1c526ff87444b64b5fb220a7ae3ba62d
    1c526ff87444b64b5fb220a7ae3ba62d
    
  • 相关阅读:
    计算程序运行时间的方法
    poj 2540 Hotter Colder 半平面交 不等式求区域面积
    poj 2954 Triangle Pick公式
    mini2440 w35 制作开机logo 去除logo光标
    java中的闰年的计算
    java中的TCP SERVER代码
    java中的程序关键字累积
    java中的比较大小的代码
    java中的记事本的最初几步
    局域网聊天工具FreeChat 1.0 开发日志
  • 原文地址:https://www.cnblogs.com/863652104kai/p/11852089.html
Copyright © 2020-2023  润新知