这里讲一下如何用 python
获得谷歌的二次验证。
谷歌的二次验证算法都是公开的,这里感兴趣的自己搜索一下,这里直接贴出方案。
自写代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import base64 import hashlib import hmac import struct import time
class Google:
def get_hotp_token(self, secret, intervals_no): key = base64.b32decode(secret, True) msg = struct.pack(">Q", intervals_no) h = hmac.new(key, msg, hashlib.sha1).digest() # 很多网上的代码不可用,就在于这儿,没有chr字符串 o = ord(chr(h[19])) & 15 h = (struct.unpack(">I", h[o:o + 4])[0] & 0x7fffffff) % 1000000 return h
def get_totp_token(self, secret): return self.get_hotp_token(secret, intervals_no=int(time.time())
|
这里就不再贴使用方法了。
使用第三方库
1 2 3 4 5 6 7 8 9
| import onetimepass as otp
class Google:
@staticmethod def getCode(my_secret): my_token = otp.get_hotp(my_secret, intervals_no=int(time.time()) return my_token
|
都很好理解,这里说一下注意点。
有的时候,我们会获得长度少于 6
的验证码,这是因为,开头如果有 0
会被消除,比如,验证码为 007666
会显示 7666
。
所以,如果,长度不够,我们要在开头补零。
google_code = google_code.zfill(6)