1

当我在 Google Authenticator (Android)、Microsoft Authenticator (Android) 和 oathtool (Ubuntu 18.04.3 LTS) 中使用密钥“abcdefghijklmnop”时,我得到了匹配的基于时间的一次性密码 (TOTP) 值。不幸的是,当我在以下 Haskell 代码中使用相同的键时(无论是在 Windows 10 还是 Ubuntu 18.04.3 LTS 上),我没有得到匹配的 TOTP 值:

{-# LANGUAGE OverloadedStrings #-}
import Data.OTP
import Data.Time.Clock

main = do
    -- This key is just for testing purposes
    let theSecretKey = "abcdefghijklmnop"

    -- See http://hackage.haskell.org/package/OTP-0.1.0.0/docs/Data-OTP.html#g:2
    curTime <- getCurrentTime
    let theTOTP = totp SHA1 theSecretKey curTime 30 6
    print theTOTP

我认为这意味着上面的代码有一个错误。如果我冒险猜测,“theSecretKey”或“curTime”是以无效格式传递的,但我不确定是哪个。

我应该在上面的代码中进行哪些更改才能正确调用 totp 函数?

注意:在使用 oathtool 进行测试时,我能够验证我应该使用 SHA1 哈希算法

4

0 回答 0