Python密码库生成一次性密码



passlib生成一次性密码(符号长度为N的短信密码(的最简单方法是什么?

我现在是如何创建的:

from secrets import randbelow as secrets_randbelow

def create_secret_code() -> str:  # TODO use OTP
secret_code = "".join([str(secrets_randbelow(exclusive_upper_bound=10)) for _ in range(config.SECRET_CODE_LEN)])
print_on_stage(secret_code=secret_code)
return secret_code

显然,它需要检查生成的代码是否已经不在使用中(例如,通过Redis生成(。

我的代码中也已经有了一个passlib对象来散列和验证密码

from passlib.context import CryptContext
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")

我找到了这个类,但不知道如何生成具有N个符号长度的短信密码

第页。S.我添加了一个fastapi标签,因为我使用的是fastapi,而passlib是它的标准加密工具,文档

您可以使用令牌所需的位数初始化TOTP类,如下所示:

TOTP(digits=10)

下面是一个完整的例子,使用config.SECRET_CODE_LEN:

from passlib.totp import TOTP
otp = TOTP('s3jdvb7qd2r7jpxx', digits=config.SECRET_CODE_LEN)
token = otp.generate()
print(token.token)

相关内容

  • 没有找到相关文章

最新更新