zoukankan      html  css  js  c++  java
  • 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. 注意
    这是基于时间更新谷歌验证码,因此需要保证电脑上的时间准确。
  • 相关阅读:
    平均要取多少个(0,1)中的随机数才能让和超过1
    perl学习笔记
    K-means
    Mysql数据库常用操作整理
    ETL模型设计
    c++ 面试整理
    vim display line number
    inux 下的/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc 文件的作用
    Linux命令大总结
    perl learning
  • 原文地址:https://www.cnblogs.com/lipx9527/p/13933284.html
Copyright © 2011-2022 走看看