FLASK--token的生成与解析-base64原理

本文详细介绍了Base64编码的工作原理,包括将字符串拆分、二进制转换、重新分组、查找对应字符等步骤。同时,展示了如何使用Python进行Base64编码和解码。此外,还探讨了token的安全认证过程,包括生成和验证token的函数,确保时间戳的有效性和哈希一致性。
摘要由CSDN通过智能技术生成

base64揭秘原理

1, 将字符串拆成每三个字符一组
2,计算每一个字符对应的ASCII码二进制
3,将8位的二进制码,按照每6位一组重新分组,不足6位的在后面补0 ,补足6位
4,计算对应的十进制编码
5,按照base64表,查看对应的字符
6,每三个字符一组,不够一组的,用24对重新分组后位数取余

原始字符->ASCII编码二进制->重新分组->ASCII编码十进制->base64索引值(十进制)->对应baser64值

1、单个字符后面有2个等号
2、两个字符后面有1个等号
3、三个字符一组没等号

ASCII对照表:http://ascii.911cha.com/
Base64编码对照表:https://www.cnblogs.com/rumenz/articles/15340777.html
在这里插入图片描述


import time
import base64
import hmac


# 解析token
def __certify_token(key, token):
    """
    解析token
    @Args:
        key: str
        token: str
    @Returns:
        boolean
    :param key:
    :param token:
    :return:
    """
    token_str = base64.urlsafe_b64decode(token).decode('utf-8')
    token_list = token_str.split(':')
    if len(token_list) != 2:
        return False
    ts_str = token_list[0]
    if float(ts_str) < time.time():
        return False
    known_sha1_tsstr = token_list[1]
    sha1 = hmac.new(key.encode("utf-8"), ts_str.encode('utf-8'), 'sha1')
    calc_sha1_tsstr = sha1.hexdigest()
    if calc_sha1_tsstr != known_sha1_tsstr:
        return False
    return True


# 生成token
def __generate_token(key, expire=3600):
    """
    @Args:
        key: str (用户给定的key,需要用户保存以便之后验证token,每次产生token时的key 都可以是同一个key)
        expire: int(最大有效时间,单位为s)
    @Return:
        state: str
    :param key:
    :param expire:
    :return:
    """
    ts_str = str(time.time() + expire)
    ts_byte = ts_str.encode("utf-8")
    sha1_tshex_str = hmac.new(key.encode("utf-8"), ts_byte, 'sha1').hexdigest()
    token = ts_str + ':' + sha1_tshex_str
    b64_token = base64.urlsafe_b64encode(token.encode("utf-8"))

    return b64_token.decode("utf-8")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z千鑫

在线乞讨,行行好吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值