Когда я использую секретный ключ «abcdefghijklmnop» в Google Authenticator (Android), Microsoft Authenticator (Android) и клятве (Ubuntu 18.04.3 LTS), я получаю соответствующий одноразовый пароль на основе времени (TOTP) ) ценности. К сожалению, я не получаю совпадающее значение TOTP, когда использую тот же ключ в следующем коде Haskell (будь то Windows 10 или Ubuntu 18.04.3 LTS):
{-# 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
I думаю, это означает, что в приведенном выше коде есть ошибка. Если бы я рискнул предположить, то либо «theSecretKey», либо «curTime» передаются в недопустимом формате, но я не уверен, какой именно.
Что я должен изменить в приведенном выше коде, чтобы правильно вызывать функцию totp?
ПРИМЕЧАНИЕ. Во время тестирования с помощью oathtool я смог убедиться, что должен использовать хеширование SHA1. алгоритм