iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Google Authenticator
  • 357
分享到

Google Authenticator

GoogleAuthenticator 2023-01-31 06:01:47 357人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

小生博客:Http://xsboke.blog.51cto.com -------谢谢您的参考,如有疑问,欢迎交流 一、 原理详解(点击图片然后放大查看) 二、 验证1、下载Google谷

小生博客:Http://xsboke.blog.51cto.com

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

一、 原理详解(点击图片然后放大查看)
Google Authenticator TOTP原理详解(以Python为例)

二、 验证
1、下载Google谷歌身份验证器。
2、通过python 的qrcode和pyotp模块生成二维码。
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

# setup 1 : base32 secret
# 提示:Secret的长度最好不要超过32
Secret = 'userxiaosheng'

# Secret += '=' * (8-len(Secret)%8) # py3中base64模块要求字符串必须为8的倍数,不足部分使用 = 补全
# 在查阅相关资料时,发现解决【可以将Key进行b3Decode】的代码都是这样写的(或者类似).
# 但是在生产环境中,为了给每个用户生成不一样的Key,我们必须通过各种算法,生成一个和用户有关的字符串作为Key使用,
# 如果你使用的是 Secret += '=' * (8-len(Secret)%8) 这种方式解决b32decode问题,那么当Key中有数字时,
# b32decode将会报错:binascii.Error: Non-base32 digit found,
# 通过测试,我找到了一段代替Secret += '=' * (8-len(Secret)%8)的代码,所以在我这篇文章中,
# 将会使用Secret = base64.b32encode(s=Secret.encode('utf-8'))来代替类似Secret += '=' * (8-len(Secret)%8) 的代码.

Secret = base64.b32encode(s=Secret.encode('utf-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、生成二维码

import pyotp
from qrcode import QRCode
from qrcode import constants

Secret = 'userxiaosheng'
Secret = base64.b32encode(s=Secret.encode('utf-8'))
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')

--结束END--

本文标题: Google Authenticator

本文链接: https://www.lsjlt.com/news/189618.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Google Authenticator
    小生博客:http://xsboke.blog.51cto.com -------谢谢您的参考,如有疑问,欢迎交流 一、 原理详解(点击图片然后放大查看) 二、 验证1、下载Google谷...
    99+
    2023-01-31
    Google Authenticator
  • 谷歌二次验证 Google Authenticator
    后台登录要搞令牌,类似于steam令牌、企鹅令牌等等 开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。 实现Google Authenticator功能需...
    99+
    2023-09-06
    服务器 运维
  • 使用 Java 1.2 的 Authenticator 类 (转)
    使用 Java 1.2 的 Authenticator 类 (转)[@more@]当您用喜好的浏览器在网上冲浪时,您会遇到要求代理服务器认证或 HTTP 服务器认证的 URL,并会出现您再熟悉不过的窗口要求您输入用户名及口令: 从浏览器访问...
    99+
    2023-06-03
  • Google Protocol Buff
    跨语言通信方案的比较—Thrift、Protobuf和AvroGoogle Protobuf 3版本介绍Google Protocol Buffer 简单介绍python+protobuf 在python中使用protocol buffe...
    99+
    2023-01-31
    Google Protocol Buff
  • golang 安装google
    Go语言(Golang)是一种编程语言,由Google开发和推广。它具有简单易学、高效、安全等特点,在近年来已经得到了广泛应用和越来越多的关注,尤其是在Web应用程序开发领域。为了使用Go语言进行编程,您需要先安装Golang的运行环境,以...
    99+
    2023-05-16
  • Google Maps JSAPI V3
    在V3中,做了不少改进,下面对将做简单扼要地介绍。 V3的特性:     1. 不再需要API Key     2. 指定sensor传感器参数,检测到用户当前位置     3. 针对移动设备(IPhone设备和Android系统)的开发 ...
    99+
    2023-01-31
    Maps Google JSAPI
  • Google Enjarify:可代替
    Enjarify 是一个将Dalvik字节码转化为等价的Java字节码,然后可以用一系列的Java分析工具去分析Android应用。之前我们一直使用Dex2jar来完成这个工作,不过Dex2jar已经算是一个非常老的工具咯。Dex2jar...
    99+
    2023-01-31
    Google Enjarify
  • google maps js v3 ap
    原文地址 前面我们学习了地图和标记的创建。那么今天我们来学习怎样在地图上显示一个窗口(infowindow) infowindow构造函数为:InfoWindow(opts:InfoWindowOptions)。InfoWindowOp...
    99+
    2023-01-31
    maps google js
  • google云服务器
    云服务器可以为用户提供高速、可靠、安全的数据存储和处理服务。在数据处理方面,云服务器可以实现高度并行处理,可以在不同的服务器之间同时处理数据,大大提高了数据处理的效率。同时,云服务器还支持海量数据存储和备份,可以帮助用户轻松应对数据灾备和数...
    99+
    2023-10-28
    服务器 google
  • python 实现google auth
    1.背景google auth 作为二次认证,大多场景下都使用在ssh 登录下,而且在ssh 的场景下使用,搭建相对比较简单,本文将介绍google auth 使用在应用平台的二次认证,如:单点登录,网站登录等平台,增加平台的安全性认证。...
    99+
    2023-01-31
    python google auth
  • Python 写的 Google Map
    GoogleMap的切片地址改变了,以下内容已成历史:)   我们最近的遥感实习要做野外调绘,没想到老师给的图竟然比 Google Map 上的图还要旧,想想干脆就把 Google Map 上的图下载下来参考一下。 主要代码是这里面的:...
    99+
    2023-01-31
    Python Google Map
  • python 调用Google Tran
    调用Google 翻译API进行翻译 #!/usr/bin/python #coding: UTF-8 import sys reload(sys) sys.setdefaultencoding('utf8') from ...
    99+
    2023-01-31
    python Google Tran
  • Google Sheet 数据转 json
    大家好,我们又见面了啊~本文《Google Sheet 数据转 json》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能...
    99+
    2024-04-04
  • google map api v3 离线
    在以往的监控软件项目中,由于客户的需求和对自身产品竞争力的提升,经常会涉及到对电子地图和GIS信息的扩展。目前开发通常的解决办法是采用破解的mapinfo地图控件实现,或者直接采用地图图片叠加实现。前者mapinfo地图文件获取不易,通常需...
    99+
    2023-01-31
    离线 map google
  • ubuntu16.04怎么卸载google
    ubuntu16.04中卸载google的方法:1、打开ubuntu16.04终端;2、输入“sudo apt-get remove google-chrome-stable”命令卸载ubuntu16.04中的google浏览器即可。具体操...
    99+
    2024-04-02
  • ubuntu中如何卸载google
    这篇文章主要介绍“ubuntu中如何卸载google”,在日常操作中,相信很多人在ubuntu中如何卸载google问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ubuntu中如何卸载google”的疑惑有所...
    99+
    2023-07-04
  • Google关键字工具
    Google关键字工具【199cloud-艾娜】Google 关键字工具地址:https://adwords.google.com/select/KeywordToolExternalGoogle 关键字工具主要有以下用途和特征:网站初建,...
    99+
    2023-06-03
  • Google 地图 API 和 period_in_traffic
    大家好,今天本人给大家带来文章《Google 地图 API 和 period_in_traffic》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真...
    99+
    2024-04-05
  • Google Sitelinks指的是什么
    今天就跟大家聊聊有关Google Sitelinks指的是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Google Sitelinks一直被认为是高质量网站的一种表现,它意味着...
    99+
    2023-06-12
  • Google是如何运作的
    这篇文章主要讲解了“Google是如何运作的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Google是如何运作的”吧!来看看主流媒体对这本书的评价吧:Google 如何为创意型员工打造出独...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作