python 认证 国际_谷歌身份认证 Python实现

import base64, time, struct, hmac, hashlib

import os

def get_google_code_by_date(secret_key):

"""

基于时间的算法

:param secret_key:

:return:

"""

decode_secret = base64.b32decode(secret_key, True)

# 解码 Base32 编码过的 bytes-like object 或 ASCII 字符串 s 并返回解码过的 bytes。

interval_number = int(time.time() // 30)

message = struct.pack(">Q", interval_number)

digest = hmac.new(decode_secret, message, hashlib.sha1).digest()

index = ord(chr(digest[19])) % 16

google_code = (struct.unpack(">I", digest[index:index + 4])[0] & 0x7fffffff) % 1000000

return "%06d" % google_code

def get_google_code_by_time(secret_key, num):

"""

基于计数器的算法

:param secret_key:

:return:

"""

decode_secret = base64.b32decode(secret_key, True)

# 解码 Base32 编码过的 bytes-like object 或 ASCII 字符串 s 并返回解码过的 bytes。

result = {}

for interval_number in range(num, num + 5):

message = struct.pack(">Q", interval_number)

digest = hmac.new(decode_secret, message, hashlib.sha1).digest()

index = ord(chr(digest[19])) % 16

google_code = (struct.unpack(">I", digest[index:index + 4])[0] & 0x7fffffff) % 1000000

result[interval_number] = "%06d" % google_code

return result

def get_secret_key():

"""

随机生成secret_key

:return:

"""

return base64.b32encode(os.urandom(10)).decode('utf-8')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值