最佳答案
我试图使用一次性密码,可以生成使用 Google Authenticator 应用程序。
基本上,Google Authenticator 实现了两种类型的密码:
Google Authenticator 也可以在这里以开放源码的形式获得: Code.google.com/p/google-authenticator
我一直在寻找生成 HOTP 和 TOTP 密码的现有解决方案,但没有找到太多。下面的代码片段负责生成 HOTP:
import hmac, base64, struct, hashlib, time
def get_token(secret, digest_mode=hashlib.sha1, intervals_no=None):
if intervals_no == None:
intervals_no = int(time.time()) // 30
key = base64.b32decode(secret)
msg = struct.pack(">Q", intervals_no)
h = hmac.new(key, msg, digest_mode).digest()
o = ord(h[19]) & 15
h = (struct.unpack(">I", h[o:o+4])[0] & 0x7fffffff) % 1000000
return h
我面临的问题是,我使用上述代码生成的密码与使用 Google Authenticator 应用为 Android 生成的密码不一样。尽管我尝试了多个 intervals_no
值(确切地说是第一个10000,从 intervals_no = 0
开始) ,其中 secret
等于 GA 应用程序中提供的键。
我的问题是:
总之: 请给我任何线索,将帮助我实现在我的 Python 代码谷歌身份验证认证。