• python3计算谷歌验证码


    1. 问题
    使用python3计算谷歌验证码(16位谷歌秘钥,生成6位验证码。基于时间,每30s更新1次)
    2. 代码

    import hmac, base64, struct, hashlib, time


    class CalGoogleCode():
    """计算谷歌验证码(16位谷歌秘钥,生成6位验证码)"""

    # 使用静态方法,调用这个方法时,不必对类进行实例化
    @staticmethod
    def cal_google_code(secret, current_time=int(time.time()) // 30):
    """
    :param secret: 16位谷歌秘钥
    :param current_time: 时间(谷歌验证码是30s更新一次)
    :return: 返回6位谷歌验证码
    """
    key = base64.b32decode(secret)
    msg = struct.pack(">Q", current_time)
    google_code = hmac.new(key, msg, hashlib.sha1).digest()
    o = ord(chr(google_code[19])) & 15 # python3时,ord的参数必须为chr类型
    google_code = (struct.unpack(">I", google_code[o:o + 4])[0] & 0x7fffffff) % 1000000
    return '%06d' % google_code # 不足6位时,在前面补0


    if __name__ == '__main__':
    secret_key = "ABCDEFGHIJKLMNOP"
    print(CalGoogleCode.cal_google_code(secret_key)) # 并未实例化CalGoogleCode,也可以调用它的方法
    3. 注意
    这是基于时间更新谷歌验证码,因此需要保证电脑上的时间准确。
  • 相关阅读:
    1225. 岛的周长
    238. Product of Array Except Self除自身以外数组的乘积
    RxJava--Buffer,GroupBy 对比
    RxJava--Buffer,GroupBy 对比
    HDU-2182-Frog
    HDU-2182-Frog
    Linux下必知必会文件和目录
    Linux下必知必会文件和目录
    获取一篇新闻的全部信息
    获取一篇新闻的全部信息
  • 原文地址:https://www.cnblogs.com/lipx9527/p/13933284.html
Copyright © 2020-2023  润新知