3

我需要在一个简单的 python 脚本中生成一个可以在 Django 中使用的加密密码。我需要导入什么包/模块来实现这一点?我正在寻找类似的东西:

from django.auth import create_password_from_string

django_password = create_password_from_string('coolpassword')

背景是,我在 server1 上有一个 PHP 应用程序,它应该与 server2 上的 Django 应用程序共享帐户。在 PHP 应用程序中创建帐户时,我想启动一个 python 脚本,为 django 应用程序生成加密密码并将其传输到 server2。

当然,对于这个用例来说,用 PHP 创建加密字符串会更好,但我敢打赌,它更难实现。

4

2 回答 2

2

您正在寻找的是make_password

基本用法:

只需传递您的纯文本密码,它就会返回您需要的哈希值。

此外,根据项目要求和规范,您可以在 server2 应用程序上设置算法:只需传递hasher参数(注意:在 Django 中,默认为 PBKDF2)。

环境要求:

首先,如果您是 Python 新手,我的建议是查看PYTHONPATH 环境变量,该变量用于“告诉”解释器必须搜索的位置。然后,使用 Django,如果您愿意,您可以定义正在运行的实例必须指向的设置文件。这是通过另一个环境变量 DJANGO_SETTINGS_MODULE完成的,对于 django-admin 也可以内联设置:

django-admin runserver --settings=server2.settings

make_password 示例:

假设您的 Python/Django 环境/路径变量配置正确,您有:

$ python manage.py shell
>>> from django.contrib.auth.hashers import make_password
>>> make_password('password', 'generate something random', 'pbkdf2_sha256')

结果:

'pbkdf2_sha256$36000$generate something random$0F6M8tj8Y65YXuUgfRkDAwYqrky6Ob5JN+HLPO+6Ayg='
于 2019-01-08T21:26:27.957 回答
1

我实际上为 PHP 找到了一种简单的方法,它更适合我的用例:

$password = 'password'
$salt = 'generate something random'
$iterations = 120000
$hash = base64_encode(hash_pbkdf2 ( 'sha256' , $password , $salt , $iterations, 32, true));

$django_password = 'pbkdf2_256'. '$' . $iterations . '$' . $hash;
于 2019-01-08T22:06:51.680 回答