python 接入GoogleAuth

21 篇文章 0 订阅

经常会用到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)))

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SeasonRun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值