栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python | 密码验证 | pyotp+qrcode实现MFA生成与验证(基于Python2.7.13)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python | 密码验证 | pyotp+qrcode实现MFA生成与验证(基于Python2.7.13)

# -*- coding:utf-8 -*-

import datetime
import pyotp
from qrcode import QRCode
from qrcode import constants

# 为了方便我用一个固定值测试
# secret_key = pyotp.random_base32()
secret_key = "IVMUUGHFE6XJ7YKX"


def generate_opt(username, issuer_name):
    """
    生成WFA认证二维码
    :param username: 用户名称
    :param issuer_name: 分发者名称
    :return: 生成二维码图片
    """
    totp = pyotp.TOTP(secret_key)
    provisioning_uri = totp.provisioning_uri(
        username,
        issuer_name=issuer_name,
    )
    qr = QRCode(version=1,
                error_correction=constants.ERROR_CORRECT_L,
                box_size=6,
                border=4, )
    qr.add_data(provisioning_uri)
    qr.make(fit=True)
    img = qr.make_image()
    img.save('./OPT_%s.png' % (secret_key))


def check(secret_key, /confirm/iation_code):
    """
    通过 授权令牌 和 验证6位码,验证当前是否匹配
    :param secret_key: 授权令牌
    :param /confirm/iation_code: 验证6位码
    :return: 认证情况
    """
    totp = pyotp.TOTP(secret_key)
    if totp.verify(/confirm/iation_code):
        print('认证通过')
        return True
    else:
        print('认证失败')
        return False


def get_/confirm/iation_code():
    """
    通过令牌直接获取并显示 验证6位码
    :return:
    """
    # 获取 secret_key 对应的一次性密码
    totp = pyotp.TOTP(secret_key)
    print(totp.now())
    return totp.now()
    # print(datetime.datetime.now())


# 注册
generate_opt('Ken', 'Thompson')

# 检验
check(secret_key, "123456")
new_/confirm/iation_code = get_/confirm/iation_code()
check(secret_key, new_/confirm/iation_code)

# 你可以扫描生成的 OPT_XXX.png 图片查看实时 /confirm/iation_code 值

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/423552.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号