python3计算Google Authenticator

Google Authenticator基本上实现了两种类型的密码:

HOTP – 基于HMAC的一次性密码,这意味着密码随着每次呼叫而改变,符合RFC4226
TOTP – 基于时间的一次性密码,每30秒钟更换一次。

Google身份验证器也可以在此处以开放源代码形式提供:code.google.com/p/google-authenticator

python3

# -*- coding:utf-8 -*-
import hmac, base64, struct, hashlib, time

def get_hotp_token(secret, intervals_no):
    key = base64.b32decode(secret, True)
    msg = struct.pack(">Q", intervals_no)
    h = hmac.new(key, msg, hashlib.sha1).digest()
    o = ord(chr(h[19])) & 15
    h = (struct.unpack(">I", h[o:o+4])[0] & 0x7fffffff) % 1000000
    return h

def get_totp_token(secret):
    return get_hotp_token(secret, intervals_no=int(time.time())//30)

print(get_totp_token('xxxxxxxxx'))

发表评论

电子邮件地址不会被公开。 必填项已用*标注