12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- import time
- from django.core import signing
- import hashlib
- HEADER = {'typ': 'JWP', 'alg': 'default'}
- KEY = "J&Y"
- SALT = "www.jmd-mall.cn"
- def encrypt(obj):
- """加密:signing 加密 and Base64 编码"""
- value = signing.dumps(obj, key=KEY, salt=SALT)
- value = signing.b64_encode(value.encode()).decode()
- return value
- def decrypt(src):
- """解密:Base64 解码 and signing 解密"""
- src = signing.b64_decode(src.encode()).decode()
- raw = signing.loads(src, key=KEY, salt=SALT)
- return raw
- def create_token(username):
- """生成token信息"""
- # 1. 加密头信息
- header = encrypt(HEADER)
- # 2. 构造Payload(有效期14天)
- payload = {"username": username, "iat": time.time(),
- "exp": time.time() + 1209600.0}
- payload = encrypt(payload)
- # 3. MD5 生成签名
- md5 = hashlib.md5()
- md5.update(("%s.%s" % (header, payload)).encode())
- signature = md5.hexdigest()
- token = "%s.%s.%s" % (header, payload, signature)
- return token
- def get_payload(token):
- """解析 token 获取 payload 数据"""
- payload = str(token).split('.')[1]
- payload = decrypt(payload)
- return payload
- def get_username(token):
- """解析 token 获取 username"""
- payload = get_payload(token)
- return payload['username']
- def get_exp_time(token):
- """解析 token 获取过期时间"""
- payload = get_payload(token)
- return payload['exp']
- def check_token(username, token):
- """验证 token:检查 username 和 token 是否一致且未过期"""
- return get_username(token) == username and get_exp_time(token) > time.time()
|