【无标题】

hash三大特性

1.不可逆

2.定长输出

3.雪崩

json.loads

json.dumps

replace('==',"")

import base64
#base64所有方法的参数和结果都是字节串
username = "zhaoliying"
a = base64.b64encode(username.encode())
print(a.decode())

result=base64.b64decode(a)
print(result.decode())
import base64
import json
import hmac
import time

class Jwt:
    def __init__(self):
        pass
    def make_token(self,payload,key):
        #1.header
        header = {"alg":"HS256","typ":"JWT"}
        header = json.dumps(header)
        header_bs64 = self.make_bs64(header)
        #2.payload
        payload=json.dumps(payload)
        payload_bs64 = self.make_bs64(payload)

        #3.sign
        part_one_two = header_bs64+b'.'+payload_bs64
        sign = hmac.new(key.encode(),part_one_two,digestmod="SHA256").hexdigest()
        sign_bs64=self.make_bs64(sign)

        return part_one_two+b"."+sign_bs64


    def check_token(self,token,key):
        """

        :param token: 令牌token -会话保持
        :return:
        """
        #1.合法性
        part1,part2,part3 = token.split(b".")
        sign = hmac.new(key.encode(),part1+b"."+part2,digestmod='SHA256').hexdigest()
        sign_bs64 = self.make_bs64(sign)
        if sign_bs64 != part3:
            raise
        #2.有效期
        #给part2补等于号
        #base64的长度一定是4的倍数
        get_len = len(part2) % 4
        if get_len != 0:
            part2 += (4-get_len) * b"="

        payload = json.loads(base64.urlsafe_b64decode(part2))
        exp = payload.get('exp')
        now = int(time.time())
        if now>exp:
            raise
        return payload


    def make_bs64(self,string):
        """

        :param string: base64编码
        :return:
        """
        return base64.urlsafe_b64encode(string.encode()).replace(b"=",b"")
if __name__ == '__main__':
    jwt_obj=Jwt()
    payload={
        "exp":int(time.time())+5,
        "username":"liying",
    }
    key="sadfghjkertyuixcvbn"
    token=jwt_obj.make_token(payload,key)
    print(token)
    # time.sleep(6)
    try:
        payload = jwt_obj.check_token(token,key)
        print(payload)
    except Exception as e:
        print(e)
        print("请重新登录")
import jwt
import time
#1.生成token
payload = {
    "exp":int(time.time()+5)
}
key="FDKLGJHFSDAIOUYRTEPOIURTE"
token = jwt.encode(payload,key,algorithm="HS256")
print(token)

#2.校验token
time.sleep(6)
payload=jwt.decode(token,key,algorithms="HS256")
print(payload)
import hmac

key=b'1234567890'
msg=b'{"username":"zhaoliy","exp":"871016"}'
hobj = hmac.new(key,msg,digestmod='SHA256')
print(hobj.hexdigest())

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值