【问题标题】:Why Time based OTP varying on badger2040 and raspberry pi pico using micropython为什么基于时间的 OTP 使用 micropython 在 badger2040 和 raspberry pi pico 上有所不同
【发布时间】:2022-12-22 19:57:38
【问题描述】:

我目前正在开发一个双因素身份验证系统我已经编写了一些程序来生成 base32 密钥并使用该密钥程序将使用相同的密钥每 30 秒生成一个新的基于时间的 otp。我想在 badger2040 上实现它使用 micropython 的设备。

https://github.com/nehadubey10/TOTP_GENERATION,我已经使用这段代码在 badger2040 上实现了 totp。 当我使用相同的代码在 Windows 或 Linux 系统上实现时,它将使用我们正在生成的密钥生成相同的 otp。我已经测试过我的程序或应用程序是否使用与我使用过此站点 https://totp.danhersam.com/ 相同的密钥生成相同的代码。但是当我尝试在 badger2040 上实施时,它使用相同的密钥生成不同的 otp,任何人都可以告诉我原因。

【问题讨论】:

    标签: python-3.7 qr-code micropython totp rp2040


    【解决方案1】:

    我知道游戏有点晚了,但这可能会对其他人有所帮助。

    代码生成不同步的可能原因

    据我了解,OTP uses a synchronised time 生成代码,快速浏览一下您的代码表明您没有在otp() 中设置时间before using it,因此您在 2040 上生成的代码基于默认的@ 987654323@(IIRC 那是2021 年 1 月 1 日 00:00:00.00默认情况下在 RPI pico 上)。

    使用 RTC 对象设置时间

    要设置时间,您可以使用 micropython's machine RTC class 像这样设置时间(从链接文档转载):

    rtc = machine.RTC()
    rtc.datetime((2020, 1, 21, 2, 10, 32, 36, 0))
    print(rtc.datetime())
    

    (2020, 1, 21, 2, 10, 32, 36, 0) 是一个长度为 8 的元组,格式如下:

    (year, month, day of month, timezone, hour, minutes, seconds, miliseconds)

    警告

    请注意,如果您没有battery backed RTC module like a DS3231,这意味着 rp2040 将在断电后立即失去对时间的跟踪,并且必须重新设置。使用电池供电的 RTC 模块的替代方法是使用 rp2040 的RTC automatically synced when plugged via USB

    【讨论】:

      猜你喜欢
      • 2022-09-25
      • 2023-02-17
      • 2022-08-15
      • 2021-10-06
      • 2021-06-23
      • 2023-01-31
      • 2023-01-03
      • 2023-01-03
      • 2023-01-19
      相关资源
      最近更新 更多