美文网首页
自定义salt及django加密对比

自定义salt及django加密对比

作者: hugoren | 来源:发表于2020-08-22 18:02 被阅读0次

    在使用django的日常开发中,常用功能之一,密码加密
    django常用各种算法sha, md5.... 都会加入salt
    加入salt目的是防止查表破解
    一、使用django默认的加密方法,即哈希算法

    1、注册时加密
    from django.contrib.auth.hashers import make_password
    
    ...
    user.password = make_password(password)  # 明文密码经过加密处理
    user.save()
    

    2、登录验证

    系统验证

    from django.contrib.auth import authenticate
    
    user = authenticate(username=username, password=password)
    

    手动验证

    user.check_password(password)
    二、自定义加密算法
    1、md5算法

    import hashlib
    
    def calc_md5(password):
          md5_obj = hashlib.md5()
          md5_obj.update(password.encode('utf-8'))
          return md5_obj.hexdigest()
    

    2、sha1算法

    import hashlib
    
    def calc_sha1(password):
          sha1_obj = hashlib.sha1()
          sha1_obj.update(password.encode('utf-8'))
          return sha1_obj.hexdigest()
    

    3、 md5+salt(随机字符串)加密,防止查表法破解密码

    import random
    from hashlib import md5
    
    # 获取由4位随机大小写字母、数字组成的salt值
    def create_salt(length=4):
        salt = ''
        chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
        len_chars = len(chars) - 1
        for index in range(length):
            salt += chars[random.randint(0, len_chars)]
        return salt
    

    获取原始密码+salt的md5值

    def create_md5(pwd, salt):
        md5_obj = md5()
        pwd = pwd.encode('utf-8')
        salt = salt.encode('utf-8')
        md5_obj.update(pwd + salt)
        return md5_obj.hexdigest()
    

    相关文章

      网友评论

          本文标题:自定义salt及django加密对比

          本文链接:https://www.haomeiwen.com/subject/tlnvjktx.html