toytotp是一个玩具级的 TOTP生成器。
TOTP代表基于时间的一次性密码。核心是HOTP算法。HOTP代表基于HMAC的一次性密码。以下是相关的RFC,这些算法的更多信息:
RFC2104:HMAC:Keyed-HashigforMessageAutheticatioRFC4226:HOTP:AHMAC-BasedOe-TimePasswordAlgorithmRFC6238:TOTP:Time-BasedOe-TimePasswordAlgorithm源码:
#!/usr/bi/pytho3importbase64importhmacimportstructimportsysimporttimedefhotp(secret,couter,digits=6,digest='sha1'):paddig='='*((8-le(secret))%8)secret_bytes=base64.b32decode(secret.upper()+paddig)couter_bytes=struct.pack(">Q",couter)mac=hmac.ew(secret_bytes,couter_bytes,digest).digest()offset=mac[-1]&0x0ftrucated=struct.upack('>L',mac[offset:offset+4])[0]&0x7fffffffreturstr(trucated)[-digits:].rjust(digits,'0')deftotp(secret,iterval=30):returhotp(secret,it(time.time()/iterval))if__ame__=='__mai__':forsecretisys.argv[1:]:prit(totp(secret.strip()))
评论