当我在 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 哈希算法