python接入GoogleAuth的實(shí)現(xiàn)
經(jīng)常會用到GoogleAuth作為二次驗證碼,就扒了代碼看看這塊邏輯如何實(shí)現(xiàn)的,做個筆記。
import hmac
import struct
import time
from hashlib import sha1
from urllib.parse import urlencode, quote
if __name__ == '__main__':
# account會作為標(biāo)識顯示在身份驗證器上
account = input("please enter your account: ")
# secret用于生成秘鑰
secret = input("please enter your secret: ")
# label會作為標(biāo)識顯示在身份驗證器上
label = input("please enter your label: ")
# 將secret轉(zhuǎn)換成bytes
s = secret.encode()
# 獲取時間片(1990年1月1日0時開始計時,30秒為一個單位)
c = struct.pack(">Q", int(time.time()) // 30)
# 根據(jù)secret和時間片指定sha1算法計算hash值,返回bytes類型hash值
hmac_hash = hmac.new(s, c, sha1).digest()
print("hmac_hash:", len(hmac_hash))
# 取出hmac_hash的第19位和0xf做”與“運(yùn)算
offset = hmac_hash[19] & 0xf
print("offset:", offset)
# 從hmac_hash中取出4個16進(jìn)制字節(jié)轉(zhuǎn)換為正整數(shù)(I)并取索引為[0],再與16進(jìn)制0x7fffffff做與運(yùn)算,最后除以10的六次方
google_code = (struct.unpack(">I", hmac_hash[offset: offset + 4])[0] & 0x7fffffff) % 10 ** 6
print(google_code)
# 若計算后結(jié)果不足6位, 則在左側(cè)補(bǔ)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}'
# 調(diào)用草料二維碼生成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)))使用谷歌身份驗證器掃描鏈接生成的二維碼即可綁定。

到此這篇關(guān)于python接入GoogleAuth的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python接入GoogleAuth內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中關(guān)于os.path.pardir的一些坑
這篇文章主要介紹了python中關(guān)于os.path.pardir的一些坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
python報錯TypeError: Input z must be
大家好,本篇文章主要講的是python報錯TypeError: Input z must be 2D, not 3D的解決方法,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2021-12-12
python入門基礎(chǔ)之用戶輸入與模塊初認(rèn)識
Python的強(qiáng)大之處在于他有非常豐富和強(qiáng)大的標(biāo)準(zhǔn)庫和第三方庫,幾乎你想實(shí)現(xiàn)的任何功能都有相應(yīng)的Python庫支持。下面通過本文給大家介紹python入門基礎(chǔ)之用戶輸入與模塊初認(rèn)識,一起看看吧2016-11-11
Python循環(huán)緩沖區(qū)的應(yīng)用詳解
循環(huán)緩沖區(qū)是一個線性緩沖區(qū),邏輯上被視為一個循環(huán)的結(jié)構(gòu),本文主要為大家介紹了Python中循環(huán)緩沖區(qū)的相關(guān)應(yīng)用,有興趣的小伙伴可以了解一下2025-03-03
使用Selenium控制當(dāng)前已經(jīng)打開的chrome瀏覽器窗口
有時通過selenium打開網(wǎng)站時,發(fā)現(xiàn)有些網(wǎng)站需要掃碼登錄,就很頭疼,導(dǎo)致爬蟲進(jìn)展不下去,下面這篇文章主要給大家介紹了關(guān)于使用Selenium控制當(dāng)前已經(jīng)打開的chrome瀏覽器窗口的相關(guān)資料,需要的朋友可以參考下2022-07-07
給Python學(xué)習(xí)者的文件讀寫指南(含基礎(chǔ)與進(jìn)階)
今天,貓貓跟大家一起,好好學(xué)習(xí)Python文件讀寫的內(nèi)容,這部分內(nèi)容特別常用,掌握后對工作和實(shí)戰(zhàn)都大有益處,學(xué)習(xí)是循序漸進(jìn)的過程,欲速則不達(dá)2020-01-01
Python報錯KeyError: ‘missing_key‘的有效解決方法
在 Python 編程中,報錯信息常常讓開發(fā)者感到困擾,其中,“KeyError: ‘missing_key’”是一個較為常見的報錯,它可能在各種數(shù)據(jù)處理和字典操作的場景中出現(xiàn),本文將深入探討這個報錯的原因,并提供多種有效的解決方法,幫助開發(fā)者快速解決此類問題2024-10-10

