python接入GoogleAuth的实现

 更新时间:2023年08月07日 09:15:47   作者:SeasonRun  
经常会用到GoogleAuth作为二次验证码,本文主要介绍了python接入GoogleAuth的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

经常会用到GoogleAuth作为二次验证码,就扒了代码看看这块逻辑如何实现的,做个笔记。

import hmac
import struct
import time
from hashlib import sha1
from urllib.parse import urlencode, quote
if __name__ == '__main__':
    # account会作为标识显示在身份验证器上
    account = input("please enter your account: ")
    # secret用于生成秘钥
    secret = input("please enter your secret: ")
    # label会作为标识显示在身份验证器上
    label = input("please enter your label: ")
    # 将secret转换成bytes
    s = secret.encode()
    # 获取时间片(1990年1月1日0时开始计时,30秒为一个单位)
    c = struct.pack(">Q", int(time.time()) // 30)
    # 根据secret和时间片指定sha1算法计算hash值,返回bytes类型hash值
    hmac_hash = hmac.new(s, c, sha1).digest()
    print("hmac_hash:", len(hmac_hash))
    # 取出hmac_hash的第19位和0xf做”与“运算
    offset = hmac_hash[19] & 0xf
    print("offset:", offset)
    # 从hmac_hash中取出4个16进制字节转换为正整数(I)并取索引为[0],再与16进制0x7fffffff做与运算,最后除以10的六次方
    google_code = (struct.unpack(">I", hmac_hash[offset: offset + 4])[0] & 0x7fffffff) % 10 ** 6
    print(google_code)
    # 若计算后结果不足6位, 则在左侧补0
    google_code = f'{google_code:>06}'
    print(google_code)
    prefix = label
    prefix += f':{account}'
    ends = {
        'secret': secret,
        'label': label
    }
    base_uri = 'otpauth://totp/{prefix}?{ends}'
    # 调用草料二维码生成api
    caoliao_qrcode_url = 'https://api.pwmqr.com/qrcode/create/?url={qr_content}'
    qr_uri = base_uri.format(prefix=prefix, ends=urlencode(ends))
    print(caoliao_qrcode_url.format(qr_content=quote(qr_uri)))

 使用谷歌身份验证器扫描链接生成的二维码即可绑定。

到此这篇关于python接入GoogleAuth的实现的文章就介绍到这了,更多相关python接入GoogleAuth内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Pandas0.25来了千万别错过这10大好用的新功能

    Pandas0.25来了千万别错过这10大好用的新功能

    这篇文章主要介绍了Pandas0.25来了千万别错过这10大好用的新功能,都有哪些新功能,文中给大家详细介绍,需要的朋友可以参考下
    2019-08-08
  • 对Python Class之间函数的调用关系详解

    对Python Class之间函数的调用关系详解

    今天小编就为大家分享一篇对Python Class之间函数的调用关系详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 使用Ray集群简单创建Python分布式应用程序

    使用Ray集群简单创建Python分布式应用程序

    面对计算密集型的任务,除了多进程,就是分布式计算,如何用 Python 实现分布式计算呢?今天分享一个很简单的方法,那就是借助于 Ray
    2021-09-09
  • python字符串排序方法

    python字符串排序方法

    这篇文章主要介绍了python字符串排序方法,基于lambda实现,是非常实用的技巧,需要的朋友可以参考下
    2014-08-08
  • python查找指定文件夹下所有文件并按修改时间倒序排列的方法

    python查找指定文件夹下所有文件并按修改时间倒序排列的方法

    今天小编就为大家分享一篇python查找指定文件夹下所有文件并按修改时间倒序排列的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • python-docx如何删除所有bookmarks

    python-docx如何删除所有bookmarks

    在Python-docx库中,虽然没有直接删除书签的功能,但可以通过操作XML元素,遍历文档结构并删除指定元素来实现删除所有书签的目的,首先要明白书签在XML文件中的位置,然后利用Python-docx提供的element元素遍历并删除特定的书签元素
    2024-09-09
  • PyQt5结合matplotlib绘图的实现示例

    PyQt5结合matplotlib绘图的实现示例

    这篇文章主要介绍了PyQt5结合matplotlib绘图的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Selenium 安装和简单使用的实现

    Selenium 安装和简单使用的实现

    这篇文章主要介绍了Selenium 安装和简单使用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • python自定义解析简单xml格式文件的方法

    python自定义解析简单xml格式文件的方法

    这篇文章主要介绍了python自定义解析简单xml格式文件的方法,涉及Python解析XML文件的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-05-05
  • 完美处理python与anaconda环境变量的冲突问题

    完美处理python与anaconda环境变量的冲突问题

    这篇文章主要介绍了完美处理Python与anaconda环境变量的冲突问题,对anaconda感兴趣的同学,可以参考下
    2021-04-04

最新评论