博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Google双因子认证python最好的实现
阅读量:5735 次
发布时间:2019-06-18

本文共 1278 字,大约阅读时间需要 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

转载地址:http://hvrwx.baihongyu.com/

你可能感兴趣的文章
${pageContext.request.contextPath}
查看>>
java中循环的不同终止方式
查看>>
【测试基础】为人所知的那些事
查看>>
webpack4 系列教程(十二):处理第三方JavaScript库
查看>>
第一部分 Python如何运行
查看>>
图片嵌入-大容量的信息隐藏算法
查看>>
NAND flash和NOR flash的区别详解
查看>>
《小学生之噩梦》 用户规格说明书
查看>>
kaldi特征处理
查看>>
Android 防止控件被重复点击
查看>>
POJ3077 Rounders
查看>>
uva 712 S-Trees
查看>>
<botton>与<input type="button">的区别
查看>>
A Tour of Go Exercise: HTTP Handlers
查看>>
【alpha阶段】第八次Scrum Meeting
查看>>
iOS 判断输入是否全是空格
查看>>
认证客户端的链接与socketserver实现并发
查看>>
为什么选择.NETCore?
查看>>
15总结。(转)
查看>>
《Unity3D-鼠标控制游戏人物的方向的代码》
查看>>