zoukankan      html  css  js  c++  java
  • hashlib模块

    hashlib模块

    hashlib是一个加密模块:
    内置了很多算法
    - MD5(*******): 不可解密的算法(2018年以前)

    摘要算法:
    - 摘要是从某个内容中获取的加密字符串
    - 摘要一样,内容就一定一样: 保证唯一性

    - 密文密码就是一个摘要
    hash算法其实可以看成如下图所示的一座工厂,工厂接收你送来的原材料,经过加工返回的产品就是hash值

    import hashlib
    
    md5_obj = hashlib.md5()
    print(type(md5_obj))
    str1 = '1234'
    # update中一定要传入bytes类型数据
    md5_obj.update(str1.encode('utf-8'))
    
    # # 得到一个加密后的字符串
    res = md5_obj.hexdigest()
    # 202cb962ac59075b964b07152d234b70
    print(res)
    
    

    撞库破解hash算法加密

    # 以上操作撞库有可能会破解真实密码
    
    # 防止撞库问题: 加盐
    
    import hashlib
    
    
    def pwd_md5(pwd):  #
        md5_obj = hashlib.md5()
        # print(type(md5_obj))
        str1 = pwd  # '1234'
        # update中一定要传入bytes类型数据
        md5_obj.update(str1.encode('utf-8'))
    
        # 创造盐
        sal = '坦克怎么这么帅啊!'
        # 加盐
        md5_obj.update(sal.encode('utf-8'))
    
        # 得到一个加密后的字符串
        res = md5_obj.hexdigest()
        # eb1ca06cf5940e9fb6ef39100ec72c94
        return res
    
    user_str1 = f'tank:1234'
    
    user_str2 = f'tank:{res}'
    
    with open('user.txt', 'w', encoding='utf-8') as f:
        f.write(user_str2)
    
    # 模拟用户登陆操作
    
    # 获取文件中的用户名与密码
    with open('user.txt', 'r', encoding='utf-8') as f:
        user_str = f.read()
    
    file_user, file_pwd = user_str.split(':')
    
    # 用户输入用户名与密码
    username = input('请输入用户名:').strip()
    password = input('请输入密码:').strip()  # 1234
    
    # 校验用户名与密码是否一致
    if username == file_user and file_pwd == pwd_md5(password):  # pwd_md5('1234')
        print('登陆成功')
    else:
        print('登陆失败')
     
     
     
  • 相关阅读:
    [HDU3487]Play with Chain
    [HDU3436]Queue-jumpers
    [HDU2475]Box
    [HDU1890]RoboticSort
    [BZOJ1500]维修数列
    [POJ3580]SuperMemo
    [POJ3481]Double Queue
    [BZOJ1269]文本编辑器editor
    简单的sql注入
    图片马的制作以及菜刀的使用
  • 原文地址:https://www.cnblogs.com/lvguchujiu/p/11881987.html
Copyright © 2011-2022 走看看