使用 python 以与后缀 mysql 相同的格式加密密码

encrypt passwords with python in same format as postfix mysql

我正在开发 Postfix 虚拟邮件服务器。我有关于如何使用 MySQL 添加用户的说明。我希望找到 Python 与 MySQL 中建议的等效。这是因为我希望用户向我发送他们使用 Python.

生成的加密(散列)密码

目前要添加用户,它会提示:

INSERT INTO 'servermail`.`virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', ENCRYPT('firstpassword', CONCAT('$', SUBSTRING(SHA(RAND()), -16))), 'email1@example.com'),
('2', '1', ENCRYPT('secondpassword', CONCAT('$', SUBSTRING(SHA(RAND()), -16))), 'email2@example.com');

我想要 Python 等同于 MySQL 中的 ENCRYPT 函数,它输出加密的密码。

ENCRYPT('firstpassword', CONCAT('$', SUBSTRING(SHA(RAND()), -16))

您只需 运行:

即可实现
import crypt

password = "test_pass"
encrypted_password = crypt.crypt(password, crypt.mksalt(crypt.METHOD_SHA512))

注意,如果你的MySQL使用base64编码,你还需要在之后进行编码:

import base64

base64_encoded_password = base64.b64encode(str.encode(encrypted_password))

SQL 示例:http://sqlfiddle.com/#!9/9eecb/25257/0

None 的答案准确给出了 (MySQL) 表达式指定的内容。 对我有用的是准确模拟 SQL:

import crypt
import hashlib
import random

sha1 = hashlib.sha1()
sha1.update(str(random.random))
password = crypt.crypt(plaintext_password, "$" + sha1.hexdigest()[-16:])