📜  Python程序生成一次性密码(OTP)(1)

📅  最后修改于: 2023-12-03 15:04:41.327000             🧑  作者: Mango

Python程序生成一次性密码(OTP)

OTP(One-Time Password)一次性密码,是一种实现用户身份验证的方法,常见的包括Google身份验证器、微信身份验证、银行网银提现操作等等。

Python程序可以方便地生成OTP,实现用户身份验证。

以下是一个简单的Python程序,可以生成基于时间的OTP:

import time
import hmac
import hashlib
import base64

def generate_OTP(secret_key, time_step=30):
    current_time = int(time.time() // time_step)
    message = str(current_time).encode('ascii')
    secret = base64.b32decode(secret_key)
    h = hmac.new(secret, message, hashlib.sha1).digest()
    offset = h[-1] & 0x0f
    code = ((h[offset] & 0x7f) << 24 |
            (h[offset + 1] & 0xff) << 16 |
            (h[offset + 2] & 0xff) << 8 |
            (h[offset + 3] & 0xff))
    code = str(code % 1000000).zfill(6)
    return code

该程序需要一个密钥作为输入,该密钥必须是32个大小写字母A-Z的base32密钥。每隔30秒钟,该程序将生成一个新的一次性密码。

以下是一个示例程序,演示如何使用generate_OTP函数:

SECRET_KEY = 'JBSWY3DPEHPK3PXP'

while True:
    otp = generate_OTP(SECRET_KEY)
    print('OTP:', otp)
    time.sleep(30)

运行该示例程序,每30秒钟将生成一个新的OTP,输出结果如下:

OTP: 614838
OTP: 824257
OTP: 804034
OTP: 524029
OTP: 481539
...

该示例程序实现了基于时间的OTP生成,并且可以使用Google身份验证器等兼容的OTP验证程序进行验证。

除了基于时间的OTP,还有一些其他的OTP生成算法,如HOTP和TOTP等。这些算法需要更复杂的加密和计算,但也可以使用Python程序来实现。