Googleデュアルファクタ認証pythonの最高の実装
このバージョンは最良の実装であるべきで、この上に4つの時点を増やして、in方式で判断して間違いを避けることができます.
@コードの注釈は実は最も良い説明です
@コードの注釈は実は最も良い説明です
class _GoogleTwoSetpAuth(object):
'''Google '''
def _get_hotp_token(self, secret, intervals_no):
''' htop_token
:param secret
:param intervals_no
'''
key = base64.b32decode(secret, True)
msg = struct.pack(">Q", intervals_no)
h = hmac.new(key, msg, hashlib.sha1).digest()
o = ord(h[19]) & 15
h = (struct.unpack(">I", h[o:o+4])[0] & 0x7fffffff) % 1000000
return h
def get_totp_token(self, secret):
''' totop
:param secret ,
'''
#
t = time.time()
t_30 = t + 30
t_30_ = t -30
t_60 = t - 60
# 90s , ,
oold = self._get_hotp_token(secret, intervals_no=int(t_60) // 30)
old = self._get_hotp_token(secret, intervals_no=int(t_30_)//30)
now = self._get_hotp_token(secret, intervals_no=int(t)//30)
new = self._get_hotp_token(secret, intervals_no=int(t_30)//30)
return oold, old, now, new
def shutff_str(self):
''' 16 '''
src = "abcdefghijklmnopqrstuvwxyz".upper()
secret= "".join(random.sample(src,16)).replace(' ','')
return secret