gpt4 book ai didi

python - pyotp 有时会在生产中失败

转载 作者:行者123 更新时间:2023-11-28 22:46:28 24 4
gpt4 key购买 nike

我正在使用 pyotp .但它有时会在生产中失败。为了复制它,我编写了以下测试:

import pyotp
from time import sleep

key = pyotp.random_base32()
for i in range(10):
otp = pyotp.TOTP(key).now()
sleep(5)
print pyotp.TOTP(key).verify(otp)

示例输出是:

True
False
True
True
True
True
True
False
True
True

我无法调试这里出了什么问题,因为它运行了 8/10 次。为什么失败 2/10?

谢谢,

最佳答案

我不熟悉pyotp,但是浏览through the code ,我遇到了这个:

def timecode(self, for_time):
i = time.mktime(for_time.timetuple())
print(i, i/self.interval)
return int(i / self.interval)

timecode 用于比较不同的“otp”,看它们是否相同; interval 的默认值为 30。

大概的想法是,在 30 秒内,哈希结果相同。不幸的是,这种编码方式似乎不起作用:它需要一些绝对时间(好吧,w.r.t. 1970),并将其分成 30 秒的间隔。 timecode 的结果是自 1970 年以来 30 秒间隔的数量。当然,一旦时钟经过 *:00*:30 , 一个新的 30 秒间隔开始并且出现不匹配。 sleep 时间为 5 秒并进行 10 次试验,您的程序需要 50 秒,因此它几乎超过了 30 秒边界的 2 倍;因此,当四舍五入为整数值时,十分之二(将 sleep 时间增加到 6 秒,对于更大的样本,这将恰好是十分之二)。

正如我提到的,我不知道 pyotp,但看起来这不是故意的,它实际上应该是一个正在比较的间隔(datetime.timedelta 可以在这里提供帮助)。我刚注意到your bug report ,所以请随时提供指向此 SO 答案的链接。

与此同时,也许您应该避免 TOTP 并使用另一个类;或者根据您的需要设置一个非常长的间隔(例如 TOTP(key, interval=315360000),即 10 年)。

关于python - pyotp 有时会在生产中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27446271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com