google authenticator vs vbscript

时间:2016-06-01 22:22:46

标签: authentication vbscript

我在vbscript中实现了这个http://jacob.jkrall.net/totp/

我给同一个十六进制的代码给出了正确的6位otp,因此该部分正在工作。

我还验证了HMAC-SHA-1。对在线生成器http://www.freeformatter.com/hmac-generator.html#ad-output进行编码,相同的输入给出相同的输出。

我的时间与http://www.currenttimestamp.com/

相同

我在http://www.qr-koder.dk/生成了一个qrcode,其字符串为otpauth:// totp / $ LABEL?secret = $ SECRET,google身份验证器应用程序读取代码并开始输出每30秒更改一次的6位数代码

但APP中的代码与6个数字代码不符合VBSCRIPT代码!

我甚至尝试过截断(时间/ 30)+/- 7500步,看看它是否是时区/夏令时问题,但无济于事。

由于生成6位数的例程的其他部分似乎有效,我得出结论我不明白这一点:

qr-code上的url是

otpauth://totp/$LABEL?secret=$SECRET

带有解释

  

LABEL可用于描述应用中的密钥,而SECRET则是   16个字符的base32编码的共享密钥,现在两者都知道   客户端和服务器。

所以当我计算HMAC-SHA-1(SECRET,time()/ 30)

SECRET应该是应用程序和计算的相同字符串吗?

如果我选择1234567890的秘密,则根据http://emn178.github.io/online-tools/base32_encode.html,base32为GEZDGNBVGY3TQOJQ

我应该接受

HMAC-SHA-1("1234567890", time()/30)

HMAC-SHA-1("GEZDGNBVGY3TQOJQ", time()/30)

我相信我已经尝试了两种,但都没有效果。

1 个答案:

答案 0 :(得分:1)

系统unix时间正确。

我想问题可能在于您的HMAC-SHA-1功能中的秘密。这在很大程度上取决于HMAC-SHA-1的预期。

您的字符串“123456790”可能是二进制字符串。它是ascii表示还是utf8?即这个字符串是10个字节还是20个字节长?

我建议您在VBScript中获取输入字符串。

另一方面,除了编写自己的VBScript之外,您还可以使用现成的解决方案,例如privacyIDEA身份验证服务器,它是开源的,也带有TOTP。