生成的代码与PyOTP示例不匹配

时间:2017-10-27 15:25:19

标签: python one-time-password google-authenticator

当我找到PyOtp时,我正在寻找基于Python时间的OTP库。我扫描了样本QR码

enter image description here

使用Google身份验证器并运行相关的示例代码

import pyotp
totp = pyotp.TOTP("JBSWY3DPEHPK3PXP")
print("Current OTP:", totp.now())

但是,我的手机上的代码和应用程​​序生成的代码不匹配。我还尝试了另一个库(SpookyOTP),但代码也不匹配。使用PyOTP生成我自己的密钥,而不是使用样本密钥,也没有使它工作。

显然我做错了什么。我想到的唯一一件事就是这两个设备(我的电脑和我的电话)在某种程度上没有使用相同的时间戳来生成代码。但是这两种设备在时钟上显示相同的时间。

1 个答案:

答案 0 :(得分:1)

这些代码是基于时间的 - 您是否在设备上的Google身份验证器应用中扫描它们?

您必须确保手机和服务器(托管脚本的位置)上的时间已同步。

同步Google身份验证器应用:

我的Google身份验证器代码无效(Android) 这可能是因为您的Google身份验证器应用上的时间未正确同步。

确保您拥有正确的时间: https://support.google.com/accounts/answer/185834?hl=en

  

转到Google身份验证器应用上的主菜单点按“更多”,然后点按   设置。点按代码的时间校正点按立即同步下一步   屏幕,应用程序将确认时间已同步,并且您   现在应该可以使用您的验证码登录。同步   只会影响您的Google身份验证器应用的内部时间,   并且不会更改您设备的日期和时间时间设置。

要同步您的服务器,您需要使用NTP进行同步(我假设Ubuntu,但它与其他操作系统类似):

https://www.digitalocean.com/community/tutorials/how-to-set-up-time-synchronization-on-ubuntu-16-04

安装 要安装ntpd,请在终端提示符下输入:

sudo apt install ntp

配置 编辑/etc/ntp.conf以添加/删除服务器行。默认情况下,这些服务器已配置:

# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
server 0.ubuntu.pool.ntp.org
server 1.ubuntu.pool.ntp.org
server 2.ubuntu.pool.ntp.org
server 3.ubuntu.pool.ntp.org

更改配置文件后,您必须重新加载ntpd:

sudo systemctl reload ntp.service