ITPub博客

首页 > 数据库 > 数据库开发技术 > Google Authenticator implementation in Python

Google Authenticator implementation in Python

数据库开发技术 作者:G8bao7 时间:2017-09-29 15:03:44 0 删除 编辑
https://stackoverflow.com/questions/8529265/google-authenticator-implementation-in-python/


点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # coding= utf-8
  3. '''
  4. Created on 2017年9月29日

  5. @author: babaoqi
  6. '''
  7. import string, random
  8. import hmac, base64, struct, hashlib, time


  9. def random_str(size=10):
  10.     #all_char = string.letters + string.digits + string.punctuation
  11.     all_char = string.letters + string.digits
  12.     rchars = [random.choice(all_char) for i in range(size)]
  13.     rstr = "".join(rchars)
  14.     return rstr
  15.     
  16. def get_secret():
  17.     rstr = random_str()
  18.     # random_str 长度必须是5的倍数, encode后最后才不含'='
  19.     # 长度=10,encode返回长度为16
  20.     secret = base64.b32encode(rstr)
  21.     return secret.upper()

  22. # 基于次数
  23. def get_hotp_token(secret, intervals_no):
  24.     key = base64.b32decode(secret, True)
  25.     msg = struct.pack(">Q", intervals_no)
  26.     googleCode = hmac.new(key, msg, hashlib.sha1).digest()
  27.     o = ord(googleCode[19]) & 15
  28.     googleCode = (struct.unpack(">I", googleCode[o:o + 4])[0] & 0x7fffffff) % 1000000
  29.     # 如果验证码的第一位是0,则不会显示。此处判断若是5位码,则在第一位补上0
  30.     # 前面补0
  31.     sl = len(str(googleCode))
  32.     if sl < 6:
  33.         googleCode = "%s%s" % ('0' * (6 - sl), googleCode)
  34.     return googleCode

  35. # 基于时间
  36. def get_totp_token(secret):
  37.     period_seconds = 30
  38.     intervals_no = int(time.time()) // period_seconds
  39.     return get_hotp_token(secret, intervals_no)

  40. if __name__ == '__main__':
  41.     secret = get_secret()
  42.     
  43.     for i in xrange(0,30):
  44.         print secret, get_totp_token(secret), get_hotp_token(secret, i)
  45.         time.sleep(4)
  46.     
  47.     exit(0)

  1.     # random_str 长度必须是5的倍数, encode后最后才不含'='

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26250550/viewspace-2145604/,如需转载,请注明出处,否则将追究法律责任。

上一篇: ORA-1652
请登录后发表评论 登录
全部评论

注册时间:2013-11-04

  • 博文量
    486
  • 访问量
    1184111