OTP.NET和OTPTest网站上的OTP引脚不同

lymgl2op  于 2023-06-25  发布在  .NET
关注(0)|答案(2)|浏览(174)

我目前正在使用网站https://otptest.de/和OTP.NET库测试OTP场景。然而,我总是在我的代码和网站之间得到不同的OTP PIN。我提供了我的代码如下:text
如能提供有关如何解决此差异并确保我的代码生成的OTP PIN与www.example.com网站生成的OTP PIN相匹配的任何指导,我将不胜感激otptest.de。
尝试过otp场景。没有生成相同的一个与网站。

mbzjlibv

mbzjlibv1#

我自己也遇到过。大多数OTP生成器提供的“秘密”是BASE32编码的。OTP.NET期望解码的字节作为秘密。
下面的代码生成与测试站点相同的标记。它使用Base32Encoding助手类将秘密解码为实际的字节:

var base32Bytes = Base32Encoding.ToBytes("MYM5VAQ");
var otp = new Totp(base32Bytes);
    
var token=otp.ComputeTotp();
vsnjm48y

vsnjm48y2#

我在这里看到了一些潜在的问题:
不同的OTP算法-网站可能使用与OTP.NET不同的OTP算法。最常见的是TOTP(基于时间的一次性密码)和HOTP(基于HMAC的一次性密码)。确保您在代码中使用的算法与网站相同。
不同的时间间隔-对于TOTP,时间间隔在OTP生成中起作用。确保您在代码中使用与网站相同的时间间隔(通常为30或60秒)。
不同的密钥-密钥是OTP生成中最重要的部分。确保您在代码中使用的密钥与网站提供的密钥完全匹配。
时间同步问题-对于TOTP,系统时钟和服务器时钟之间的任何时间差异都可能导致问题。尝试尽可能精确地同步系统时间。
看看你的代码,有几件事很突出:
您正在使用TOTP,但不指定时间间隔。默认值为30秒,因此如果网站使用60秒,则会导致差异。
您生成一个新的密钥,而不是使用网站提供的密钥。这肯定会产生不同的OTP。
可能存在时间同步问题,但考虑到您每2秒生成一个新的OTP,可能性较小。
我的建议是:
从网站获取密钥,并在代码中使用该密钥。
指定时间间隔,例如totp.GenerateTotp(key,60).
仔细检查您的系统时间是否准确。
以与网站相同的时间间隔生成OTP,例如每60秒换一把T60钥匙
进行这些更改应该可以解决问题,并使您的代码生成与网站相同的OTP。
祝你好运

相关问题