toytotp是一个玩具级的 TOTP生成器。
TOTP代表基于时间的一次性密码。核心是HOTP算法。HOTP代表基于HMAC的一次性密码。以下是相关的RFC,这些算法的更多信息:
RFC2104:HMAC:Keyed-HashingforMessageAuthenticationRFC4226:HOTP:AnHMAC-BasedOne-TimePasswordAlgorithmRFC6238:TOTP:Time-BasedOne-TimePasswordAlgorithm源码:
#!/usr/bin/python3importbase64importhmacimportstructimportsysimporttimedefhotp(secret,counter,digits=6,digest='sha1'):padding='='*((8-len(secret))%8)secret_bytes=base64.b32decode(secret.upper()+padding)counter_bytes=struct.pack(">Q",counter)mac=hmac.new(secret_bytes,counter_bytes,digest).digest()offset=mac[-1]&0x0ftruncated=struct.unpack('>L',mac[offset:offset+4])[0]&0x7fffffffreturnstr(truncated)[-digits:].rjust(digits,'0')deftotp(secret,interval=30):returnhotp(secret,int(time.time()/interval))if__name__=='__main__':forsecretinsys.argv[1:]:print(totp(secret.strip()))
评论