在php中使用Django密码进行身份验证

2024-04-29 16:16:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在php中的同一个服务器上创建一个登录系统,它通过django创建注册。在

我不知道django如何加密密码。 我在数据库中看到的密码如下:

pbkdf2_sha256$10000$qlzlSSgHottd$5hV9BfLpzyAS62KZhvRyDBnagr1rYf29VbkZbfjipV4=

现在我想在PHP中创建一个登录系统,该系统使用上述哈希指定的密码进行验证。所以请帮助我如何为PHP创建一个登录系统

注意:数据库已经设置好了,我有成千上万的用户正在使用它 我需要为我正在构建的另一个系统进行身份验证


Tags: django用户服务器身份验证数据库密码系统php
3条回答

与其在PHP中重新创建散列过程,不如让Django为您处理。在

使用此脚本从原始密码获取哈希值:

django_密码_哈希.py

import sys
from django.conf import settings
settings.configure()
from django.contrib.auth import hashers
raw_password = sys.argv[1]
try:
    salt = sys.argv[2]
except IndexError:
    salt = None
hash = hashers.make_password(raw_password, salt=salt)
sys.stdout.write("%s\n" % hash)
sys.stdout.flush()
sys.exit(0)

然后从PHP调用它,如下所示:

^{pr2}$

别忘了http://www.php.net/manual/en/function.escapeshellcmd.php

我遇到了和你一样的情况,普拉蒂克,通过一些研究,下面的代码做了我想要的,这就是你想要的。在

<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);

function make_password($password) {
    $algorithm = "pbkdf2_sha256";
    $iterations = 10000;

    $newSalt = mcrypt_create_iv(6, MCRYPT_DEV_URANDOM);
    $newSalt = base64_encode($newSalt);

    $hash = hash_pbkdf2("SHA256", $password, $newSalt, $iterations, 0, true);    
    $toDBStr = $algorithm ."$". $iterations ."$". $newSalt ."$". base64_encode($hash);

    // This string is to be saved into DB, just like what Django generate.
    echo $toDBStr;
}

function verify_Password($dbString, $password) {
    $pieces = explode("$", $dbString);

    $iterations = $pieces[1];
    $salt = $pieces[2];
    $old_hash = $pieces[3];

    $hash = hash_pbkdf2("SHA256", $password, $salt, $iterations, 0, true);
    $hash = base64_encode($hash);

    if ($hash == $old_hash) {
       // login ok.
       return true;
    }
    else {
       //login fail       
       return false; 
    }
}
?>

make_password中生成的$toDBStr与您在该线程中发布的内容完全相同,您可以将字符串保存到任何数据库中,甚至可以继续使用Django创建的数据库。在

您需要选择要传递给verify_Password函数的字符串,以验证密码是否与用户输入的密码相同。在

上面的PHP代码要求php5.5具有hash_pbkdf2函数。在

好好享受吧。在

此函数在PHP7.0+中创建django哈希

function create(string $password, $iterations=36000, $algorithm='sha256', $iterations=36000) : string{
    $salt = base64_encode(openssl_random_pseudo_bytes(9));

    $hash = hash_pbkdf2($algorithm, $password, $salt, $iterations, 32, true);

    return 'pbkdf2_' . $algorithm . '$' . $iterations . '$' . $salt . '$' . base64_encode($hash);
}

相关问题 更多 >