python google auth totp_Google Authenticator TOTP原理详解(以Python为例)「建议收藏」

python google auth totp_Google Authenticator TOTP原理详解(以Python为例)「建议收藏」如果有疑问,请点击此处,然后发表评论交流,作者会及时回复(也可以直接在当前文章评论)。——-谢谢您的参考,如有疑问,欢迎交流一、原理详解(图片可以点击然后放大查看)二、验证1、下载Google谷歌身份验证器。2、通过Python的qrcode和pyotp模块生成二维码。3、然后使用下载的谷歌身份验证器扫描生成的二维码如果没有谷歌服务,则选择输入秘钥,在账户明处填入name参数,在秘…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

如果有疑问,请点击此处,然后发表评论交流,作者会及时回复(也可以直接在当前文章评论)。

——-谢谢您的参考,如有疑问,欢迎交流

一、 原理详解(图片可以点击然后放大查看)

python google auth totp_Google Authenticator TOTP原理详解(以Python为例)「建议收藏」

二、 验证

1、下载Google谷歌身份验证器。

2、通过Python 的qrcode和pyotp模块生成二维码。

python google auth totp_Google Authenticator TOTP原理详解(以Python为例)「建议收藏」

3、然后使用下载的谷歌身份验证器扫描生成的二维码

如果没有谷歌服务,则选择输入秘钥,在账户明处填入name参数,在秘钥处填入Secret即可。

4、对比手机上谷歌验证器显示的6位动态码,你会发现,和【原理详解】中代码计算处的6位动态码是一致的

三、 源码

1、计算Google Authenticator 6位动态码

#!/usr/bin/env python

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

# Google Authenticator工作原理 TOTP(Time-Based One-Time Password)

import hmac

import hashlib

import base64

import struct

import time

import pyotp

# setup 1 : base32 secret

Secret = ‘userxiaosheng’

Secret += ‘=’ * (8-len(Secret)%8) # py3中base64模块要求字符串必须为8的倍数,不足部分使用 = 补全

K = base64.b32decode(Secret,True)

# setup 2 : get current timestamp

# int(time.time()) // 30 到当前经历了多少个30秒

C = struct.pack(“>Q”, int(time.time()) // 30) # 将间隔时间转为big-endian(大端序)并且为长整型的字节

# setup 3 : start hmac-sha1

# hmac = SHA1(secret + SHA1(secret + input))

H = hmac.new(K,C,hashlib.sha1).digest() # 使用hmac sha1加密,并且以字节的方式取出 = b’\x0f\x1a\xaeL\x0c\x8e\x19g\x8dv}\xde7\xbc\x95\xeal\xa3\xc1\xee’

O = H[19] & 15 # bin(15)=00001111=0b1111

DynamicPasswd = str((struct.unpack(“>I”, H[O:O+4])[0] & 0x7fffffff) % 1000000)

# struct.unpack(‘>I’,h[o:o+4])[0] — 转为big-endian(大端序)并且不为负数的数字(整数),因为转换完是一个数组,类似”(2828101188,)”,所以需要[0]取出

# h[o:o+4] — 取其中4个字节 o=10 则取索引分别为 10,11,12,13的字节

# & 0x7fffffff = 11111111 — 与字节转换的数字做与运算

# % 1000000 — 得出的数字与1000000相除然后取余

TOTP = str(0) + str(DynamicPasswd) if len(DynamicPasswd) < 6 else DynamicPasswd

# passwd = passwd if len(passwd) < 6 else str(0) + str(passwd)

# 如果最后得出的6位数字,首位0,可能会只输出5位数字,所以这里进行一个判断,如果是5位则加上首位的0

print(TOTP)

2、生成二维码

from qrcode import QRCode

from qrcode import constants

Content = pyotp.totp.TOTP(Secret).provisioning_uri(name=’xiaosheng’, issuer_name=”Verfiy Code”)

# 在真实环境中,name的参数应该是和Secret有关联的,这样我们才能为每个不同的用户分别计算动态验证码.

qr = QRCode(version=1,

error_correction=constants.ERROR_CORRECT_L,

box_size=6,

border=4,)

qr.add_data(Content)

qr.make(fit=True)

img = qr.make_image()

img.save(‘./GoogleQR.png’)

标签:Google,为例,Python,Secret,TOTP,str,time,import,hmac

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222909.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • stardict 词典名

    stardict 词典名

    2021年7月31日
    45
  • Excel中的VBA编程「建议收藏」

    Excel中的VBA编程「建议收藏」目的:有时我们需要对Excel文件中大量的数据进行整理,此时如果使用手动整理会非常繁琐而且容易出错。而如果采用VBA语言,在Excel中根据需求编写一段简单的代码就能自动完成大量数据的整理工作。以Excel2007为例,如果要进行VBA编程,需要启用“开发工具”选项。在Excel选项对话框中勾选【在功能区显示“开发工具“选项卡】复选框。基本语法:1、给当前工作表的

    2022年5月7日
    51
  • JS于string 和 json互转对象

    JS于string 和 json互转对象

    2022年1月13日
    45
  • 快速搭建静态网站生成器「建议收藏」

    快速搭建静态网站生成器「建议收藏」快速搭建静态网站生成器下面有许多静态页面生成器,大家可以根据需求学以致用。快速搭建静态网站:https://www.staticgen.com/

    2022年5月21日
    42
  • 电子学报、计算机研究与发展中文期刊投稿过程记录

    电子学报、计算机研究与发展中文期刊投稿过程记录电子学报 计算机研究与发展中文期刊投稿过程记录电子学报 一月二十投稿 至十一月十五录用排版 历时十个多月 总体来说电子学报很规范很严 历经两次外审 审稿意见很犀利 计算机研究与发展 总历时大约六七个月 审稿严格 速度较快 但是出版慢 提前给录用通知 安排到 2021 年 10 月出版

    2025年11月11日
    2
  • 软件开发模型总结归纳(瀑布模型、螺旋模型、迭代模型、增量模型、敏捷模型)

    软件开发模型总结归纳(瀑布模型、螺旋模型、迭代模型、增量模型、敏捷模型)文章目录 0 软件的生命周期 1 瀑布模型 2 螺旋模型 3 迭代模型 4 增量模型 5 敏捷模型 0 软件的生命周期 软件的生命周期是指从软件产品的设想开始到软件不在使用而结束的时间 软件的生命周期分为 6 个阶段 即需求分析 计划 设计 编码 测试 运行维护 1 瀑布模型 瀑布模型是最早出现的软件开发模型 是所有其他软件开发模型的基础框架 与软件的生命周期不同的是 它缺少了软

    2025年9月1日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号