GVKun编程网logo

Django中的PASSWORD_HASHERS设置(django check_password)

5

以上就是给各位分享Django中的PASSWORD_HASHERS设置,其中也会对djangocheck_password进行解释,同时本文还将给你拓展Java中WEAK_PASSWORD_HASH的

以上就是给各位分享Django中的PASSWORD_HASHERS设置,其中也会对django check_password进行解释,同时本文还将给你拓展Java中WEAK_PASSWORD_HASH的修改策略、md5和password_hash谁跟牛X、password_hash()PASSWORD_DEFAULT PHP 5.5、php password_hash等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Django中的PASSWORD_HASHERS设置(django check_password)

Django中的PASSWORD_HASHERS设置(django check_password)

每当我尝试通过任何用户错误登录时都会出错

未知的密码哈希算法“ sahar”。您是否在PASSWORD_HASHERS设置中指定了它?

观点

def Login(request):    state = "Please log in below..."    username = password = ''''    if request.method == ''POST'':        username = request.POST[''username'']        password = request.POST[''password'']        user = authenticate(username=username, password=password)        if user is not None:                if user.is_active:                    login(request, user)                    return HttpResponseRedirect(''/profile/'')                else:                    return render_to_response(''auth.html'',RequestContext(request))        else:                return render_to_response(''auth.html'',RequestContext(request))    else:            return render_to_response(''auth.html'',RequestContext(request)

答案1

小编典典

这意味着有一个纯文本''sahar''存储为尝试登录的用户帐户
的密码。在Admin或admin中更新该用户的密码manage.py shell

user = User.objects.get(username=username)# use set_password methoduser.set_password(''sahar'')user.save()# INSTEAD OF user.password = ''sahar''user.save()

还要检查您的其他视图以更正user.password = ''...''User.objects.create(password=''...'')用法。

Java中WEAK_PASSWORD_HASH的修改策略

Java中WEAK_PASSWORD_HASH的修改策略

  在采用SHA-256对数据进行加密时,我们可以直接采用下面的方式进行处理:

public static String encodeBySha256(String content) {
     String encode = "";
     try {
         MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
         messageDigest.update(content.getBytes("UTF-8"));
         encode = bytesToHex(messageDigest.digest());
     } catch (Exception e) {
         System.out.println(e.getMessage());
     }
     return encode;
}

public static String bytesToHex(byte... src) {
    if (src == null || src.length <= 0) {
        return null;
    }
   StringBuilder sb = new StringBuilder();
    for (int i = 0; i < src.length; i++) {
        int value = src[i] & 0xFF;
        String hexValue = Integer.toHexString(value);
        if (hexValue.length() < 2) {
            sb.append(0);
        }
        sb.append(hexValue);
    }
    return sb.toString();
}

  上述代码能够实现对数据的SHA-256加密,但是会在encode = bytesToHex(messageDigest.digest());这一行提示WEAK_PASSWORD_HASH问题,这主要是因为不适宜直接调用messageDigest.digest()方法。那如何解决呢,我们可以采用反射的方式来处理,直接看下面修改后的代码:

public static String encodeBySha256(String content) {
     String encodeString = "";
     try {
         Class<?> mdClass = Class.forName("java.security.MessageDigest");
         Method method = mdClass.getMethod("getInstance", String.class);
         MessageDigest messageDigest = (MessageDigest) method.invoke(null, "SHA-256");
         messageDigest.update(content.getBytes("UTF-8"));
         method = mdClass.getMethod("digest");
         byte[] bytes = (byte[]) method.invoke(messageDigest);
         encodeString = bytesToHex(bytes);
     } catch (Exception exception) {
         System.out.println(exception.getMessage());
     }
    return encodeString;
}

  经过上述修改后,就不再报WEAK_PASSWORD_HASH的问题。

  延伸:若是采用MD5的加密方式的话,只需要在method.invoke(null, "SHA-256")修改为method.invoke(null, "MD5")即可。

 

------20200117勉

md5和password_hash谁跟牛X

md5和password_hash谁跟牛X

md5自不必说,想必所有phper都用过,但另一个加密函数不知道你见过没有

他就是password_hash();

加密方式更全面.使用起来也比md5+salt这种方式要简洁很多,最主要的是难破解,因为它每时每刻都在变动

它的使用方式大致是这样

1. 用户注册时提交过来密码,我们对用户密码进行加密,这里选择password_hash进行加密

2. 加密之后,将加密好的密码存储到数据表中

3.用户再次登录时,我们从表中取出密码,并使用password_verify函数进行校验,查看两种密码是否相同

简单的使用:

    $paaa = password_hash("rasmuslerdorf",PASSWORD_DEFAULT);            //设置密码加密
    $hash = ''$2y$10$2GAiKeqFxxbMUh4iBqRyPOhlhKL7T7kquYQl7u5gGAscKISD9piAm''; //这个是上面加密后得到的值
    if (password_verify(''rasmuslerdorf1'',$hash)) {
          //验证密码是否和散列值匹配
             echo ''对'';
       } else {
     echo ''错'';
       }

如果两次输入的密码不一样,就会输出密码错误

但却存在以下问题

 

1. 版本要求  php版本必须5.5+ (如果做接口对接,要求双方php版本都在5.5以上,会不会有一些不太现实)

2. 通过password_hash加密的密码基本只能通过php的函数password_verify来校验(这样和其他语言交互时会不会很麻烦呢)

所以呢,如果php自家用,我感觉password_hash真的是一个不错的选择,但如果和其他语言或者外界交互的话,可能就会出现一些小麻烦

 

具体参数详解: password_hash();、

https://www.php.net/manual/zh/function.password-hash.php

password_verify()

https://www.php.net/manual/zh/function.password-verify.php

password_hash()PASSWORD_DEFAULT PHP 5.5

password_hash()PASSWORD_DEFAULT PHP 5.5

来自password_hash()函数:

PASSWORD_DEFAULT – Use the bcrypt algorithm (default as of PHP 5.5.0).
Note that this constant is designed to change over time as new and
stronger algorithms are added to PHP. For that reason, the length of
the result from using this identifier can change over time. Therefore,
it is recommended to store the result in a database column that can
expand beyond 60 characters (255 characters would be a good choice).

这是否意味着每当PASSWORD_DEFAULT更改时我将无法使用新的PHP版本,否则password_verify()将无法正确检查旧用户密码?

解决方法:

不,password_verify()将识别所使用的算法,因为它嵌入在您要验证的哈希中:这就是哈希的第一部分(例如$2y $)表示的

php password_hash

php password_hash

2018-1-6 17:22:13 星期六

php 自带的密码生成方法, 如果生成密码最好使用这个, 这个是"单程"的, 没有解密函数

1 $a = ''123456'';
2 
3 $b = password_hash($a, PASSWORD_BCRYPT);
4 
5 echo $b; // 加密结果, 同样的数据, 每次都不一样
6 
7 $c = password_verify(123456, $b); // true或false

 结果将会是 60 个字符的字符串, 或者在失败时返回 FALSE

今天关于Django中的PASSWORD_HASHERS设置django check_password的分享就到这里,希望大家有所收获,若想了解更多关于Java中WEAK_PASSWORD_HASH的修改策略、md5和password_hash谁跟牛X、password_hash()PASSWORD_DEFAULT PHP 5.5、php password_hash等相关知识,可以在本站进行查询。

本文标签: