【问题标题】:google authenticator vs vbscript谷歌身份验证器与 vbscript
【发布时间】:2016-06-01 22:22:45
【问题描述】:

我已经在 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/ 生成了一个带有字符串 otpauth://totp/$LABEL?secret=$SECRET 的二维码,谷歌身份验证器应用程序读取该代码并开始输出每 30 秒更改一次的 6 位数代码。

但来自应用程序的代码与 VBScript 生成的 6 位代码不匹配!

我什至尝试了 trunc(time/30) +/-7500 步来查看是否是时区/夏令时问题,但无济于事。

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

二维码上的网址是

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)

?

我相信我都试过了,但都不管用。

【问题讨论】:

    标签: authentication vbscript


    【解决方案1】:

    系统unix时间是正确的。

    我猜问题可能出在您的 HMAC-SHA-1 函数中。这在很大程度上取决于 HMAC-SHA-1 的预期。

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

    我建议在您的 VBScript 中正确输入字符串。

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

    【讨论】:

      猜你喜欢
      • 2019-11-05
      • 2012-09-20
      • 2020-08-15
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      相关资源
      最近更新 更多