使用Google身份验证器进行单元测试

时间:2013-11-27 22:58:43

标签: unit-testing authentication

我目前正在使用“Google身份验证器”应用程序和我正在处理的网站,我想知道是否有可能(无论是否提供Google)编写显示双重输出的单元测试认证程序。

我想知道是否还有一个允许我在计算机上生成它的类,而不是使用手机来生成数字代码,以便我可以对结果进行单元测试。

1 个答案:

答案 0 :(得分:1)

如果您知道预共享密钥字符串(您使用Authenticator应用程序扫描的QR代码中编码的字符串),则可以生成代码。这是Python中的代码(via @TadeckGitHub):

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(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)

secret = 'MZXW633PN5XW6MZX'
for i in xrange(1, 10):
    print i, get_hotp_token(secret, intervals_no=i)