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'))
发表评论