日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

python google auth totp_Google Authenticator TOTP原理详解(以Python为例)「建议收藏」(Python.org)

發布時間:2023/12/19 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 python google auth totp_Google Authenticator TOTP原理详解(以Python为例)「建议收藏」(Python.org) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果有疑問,請點擊此處,然后發表評論交流,作者會及時回復(也可以直接在當前文章評論)。

——-謝謝您的參考,如有疑問,歡迎交流

一、 原理詳解(圖片可以點擊然后放大查看)

二、 驗證

1、下載Google谷歌身份驗證器。

2、通過Python 的qrcode和pyotp模塊生成二維碼。

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

import pyotp

# setup 1 : base32 secret

Secret = ‘userxiaosheng’

Secret += ‘=’ * (8-len(Secret)%8) # py3中base64模塊要求字符串必須為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、生成二維碼

from qrcode import QRCode

from qrcode import constants

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’)

標簽:Google,為例,Python,Secret,TOTP,str,time,import,hmac

總結

以上是生活随笔為你收集整理的python google auth totp_Google Authenticator TOTP原理详解(以Python为例)「建议收藏」(Python.org)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。