在很多网站都有动态密码验证来增加安全性,例如银行的U盾,网易的将军令等都是基于动态密码来进行身份验证。动态密码有基于次数和基于时间来刷新的协议,现在基于谷歌的身份验证器来做一个基于时间的动态密码验证系统,默认30秒刷新一次
实现原理:
1、服务端首先要约定一个base32的密钥,并且把这个密钥与某个账户关联。
2、在页面显示一个二维码,内容是一个URI地址(otpauth://totp/账号?secret=密钥)。
3、通过手机端的谷歌身份验证器软件扫描这个二维码,使密钥保存在手机客户端
实现过程:
import base64
import hashlib
import hmac
import time
import datetime
import random as _random
def byte_secret(secret):
missing_padding = len(secret) % 8
if missing_padding != 0:
secret += '=' * (8 - missing_padding)
return base64.b32decode(secret, casefold=True)
def int_to_bytestring(i, padding=8):
result = bytearray()
while i != 0:
result.append(i & 0xFF)
i >>= 8
return bytes(bytearray