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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 放一篇置顶博文随时说点什么

    放一篇置顶博文随时说点什么

    2021年9月6日
    54
  • Jenkins安装_jenkins入门

    Jenkins安装_jenkins入门前言jenkins的环境搭建方法有很多,本篇使用docker快速搭建一个jenkins环境。环境准备:mac/Linuxdockerdocker拉去jenkins镜像先下载jenkins镜

    2022年7月29日
    8
  • wireshark抓包使用教程

    wireshark抓包使用教程Wireshark是非常流行的网络封包分析软件,可以截取各种网络数据包,并显示数据包详细信息。常用于开发测试过程各种问题定位。本文主要内容包括:1、Wireshark软件下载和安装以及Wireshark主界面介绍。2、WireShark简单抓包示例。通过该例子学会怎么抓包以及如何简单查看分析数据包内容。3、Wireshark过滤器使用。通过过滤器可以筛选出想要分析的内容。包括按照协议过滤、端口和主机名过滤、数据包内容过滤。Wireshark软件安装软件下载路径:w…

    2025年9月25日
    5
  • 什么是 Sidecar[通俗易懂]

    什么是 Sidecar[通俗易懂]Sidecar是什么将本将属于应用程序的功能拆分成单独的进程,这个进程可以被理解为Sidecar。在微服务体系内,将集成在应用内的微服务功能剥离到了sidecar内,sidecar提供了微服务发现、注册,服务调用,应用认证,限速等功能。特点:Sidecar为独立部署的进程。sidecar降低应用程序代码和底层代码的耦合度,帮助异构服务通过sidecar快速接入微服务体系。Sidecar如何工作接下来以异构服务为基础介绍sidecar如何工作。Sidecar代理服务注册发现下图为异构

    2022年4月19日
    58
  • JAVA数组去重方法

    JAVA数组去重方法记录JAVA中数组去重方法1利用Set的特性去重复 Setset=newHasSet(); for(intx=0;x<arr.length;x++){ set.add(arr[x]); }最后set里面的值就是arr数组去重后的所有元素,但是set中数据是无序的,会打乱原本的顺序。2如果想保留原本的顺序就使用有顺序,不重复特点的链表的哈希集合 LinkedHasSet<Object>temp=newLinkedHasSet<>()

    2022年6月29日
    28
  • 圆柱体体积的计算公式圆柱体积的计算公式_空心圆柱重量计算公式

    圆柱体体积的计算公式圆柱体积的计算公式_空心圆柱重量计算公式圆柱的体积计算公式同仁实验学校各年级组备课教师教案教案设计课题教学内容年级六年级科目圆柱体积的计算公式数学教案类型新授P25页例5及补充例题,完成“做一做”及练习五第1~3题。授课人1、通过用切割拼合的方法借助长方体的体积公式推导出圆柱的体积公式,能够运用公教学目标式正确地计算圆柱的体积和容积。2、初步学会用转化的数学思想和方法,解决实际问题的能力。3、渗透转化思想,培养…

    2026年1月30日
    4

发表回复

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

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