python接入GoogleAuth的實(shí)現(xiàn)
經(jīng)常會(huì)用到GoogleAuth作為二次驗(yàn)證碼,就扒了代碼看看這塊邏輯如何實(shí)現(xiàn)的,做個(gè)筆記。
import hmac import struct import time from hashlib import sha1 from urllib.parse import urlencode, quote if __name__ == '__main__': # account會(huì)作為標(biāo)識(shí)顯示在身份驗(yàn)證器上 account = input("please enter your account: ") # secret用于生成秘鑰 secret = input("please enter your secret: ") # label會(huì)作為標(biāo)識(shí)顯示在身份驗(yàn)證器上 label = input("please enter your label: ") # 將secret轉(zhuǎn)換成bytes s = secret.encode() # 獲取時(shí)間片(1990年1月1日0時(shí)開始計(jì)時(shí),30秒為一個(gè)單位) c = struct.pack(">Q", int(time.time()) // 30) # 根據(jù)secret和時(shí)間片指定sha1算法計(jì)算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個(gè)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) # 若計(jì)算后結(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)))
使用谷歌身份驗(yàn)證器掃描鏈接生成的二維碼即可綁定。
到此這篇關(guān)于python接入GoogleAuth的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python接入GoogleAuth內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pandas0.25來(lái)了千萬(wàn)別錯(cuò)過(guò)這10大好用的新功能
這篇文章主要介紹了Pandas0.25來(lái)了千萬(wàn)別錯(cuò)過(guò)這10大好用的新功能,都有哪些新功能,文中給大家詳細(xì)介紹,需要的朋友可以參考下2019-08-08對(duì)Python Class之間函數(shù)的調(diào)用關(guān)系詳解
今天小編就為大家分享一篇對(duì)Python Class之間函數(shù)的調(diào)用關(guān)系詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01使用Ray集群簡(jiǎn)單創(chuàng)建Python分布式應(yīng)用程序
面對(duì)計(jì)算密集型的任務(wù),除了多進(jìn)程,就是分布式計(jì)算,如何用 Python 實(shí)現(xiàn)分布式計(jì)算呢?今天分享一個(gè)很簡(jiǎn)單的方法,那就是借助于 Ray2021-09-09python查找指定文件夾下所有文件并按修改時(shí)間倒序排列的方法
今天小編就為大家分享一篇python查找指定文件夾下所有文件并按修改時(shí)間倒序排列的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10PyQt5結(jié)合matplotlib繪圖的實(shí)現(xiàn)示例
這篇文章主要介紹了PyQt5結(jié)合matplotlib繪圖的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Selenium 安裝和簡(jiǎn)單使用的實(shí)現(xiàn)
這篇文章主要介紹了Selenium 安裝和簡(jiǎn)單使用的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12完美處理python與anaconda環(huán)境變量的沖突問(wèn)題
這篇文章主要介紹了完美處理Python與anaconda環(huán)境變量的沖突問(wèn)題,對(duì)anaconda感興趣的同學(xué),可以參考下2021-04-04