我正在尝试使用可以使用Google身份验证器应用程序生成的一次性密码.
基本上,Google身份验证器实现了两种类型的密码:
Google身份验证器也可在此处以开源形式提供: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
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,我使用上述代码生成的密码与使用适用于Android的Google身份验证器应用生成的密码不同.即使我尝试了多个intervals_no值(恰好是前10000个,开头intervals_no = 0),与secretGA应用程序中提供的密钥相等.
我的问题是:
总结一下:请给我任何有助于我在Python代码中实现Google身份验证器身份验证的线索.
python security authentication one-time-password google-authenticator
我有一个base32字符串,我需要将其转换为字节数组.我在.NET框架中找到转换方法时遇到了麻烦.我可以找到base64的方法,但不能找到base32的方法.
Convert.FromBase64String - 像base32这样的东西是完美的.
在框架中是否有这样的方法或者我必须自己滚动?