当前位置: 代码迷 >> 综合 >> python2 token和验证
  详细解决方案

python2 token和验证

热度:130   发布时间:2023-10-24 05:56:51.0

python自定义token

  • python2 token和验证
    • 生成token
    • 验证token
    • 使用举例
    • python2差异

python2 token和验证

生成token

# -*- coding: utf-8 -*-
import base64
import hmac
import time
import jsondef generate_token(key, json_data=None, expire=15):"""生成token:param key: 自定义key:param json_data: 需要传入的json数据,可以为空:param expire: 过期时间:return: token"""if json_data is None:json_data = {
    }ts_str = str(time.time() + expire)ts_byte = ts_str.encode("utf-8")sha1_tshex_str = hmac.new(key.encode("utf-8"), ts_byte).hexdigest()token = ts_str + '|' + sha1_tshex_str + '|' + json.dumps(json_data)b64_token = base64.urlsafe_b64encode(token.encode("utf-8"))return b64_token

验证token

def certify_token(key, token):"""验证token是否正确:param key: 自定义key和生成的key一致:param token: token字符串:return: (token是否正确, json数据)"""token_str = base64.urlsafe_b64decode(token).decode('utf-8')token_list = token_str.split('|')if len(token_list) != 3: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'))calc_sha1_tsstr = sha1.hexdigest()if calc_sha1_tsstr != known_sha1_tsstr:# token certification failedreturn False, {
    }# token certification successsha2 = token_list[2]return True, json.loads(sha2)

使用举例

token1 = generate_token('aaa', json_data={
    "ab": "cd"})
print 'token1: ', token1
print 'certify_token: ', certify_token('aaa', token1)返回值:
token1:  MTU5NDYxMDIyOC41MXxkY2M1OTk2MDUxOWFjYjI1MDkyZjQwMjMyZTI5NDVkMHx7ImFiIjogImNkIn0=
certify_token:  (True, {
    u'ab': u'cd'})

python2差异

python2 中不支持使用语法: hmac.new(key.encode(“utf-8”), ts_byte, ‘sha1’).hexdigest()
其中第三个参数需要是一个可被调用的参数, 'sha1’可以不填,默认调用 hashlib.md5, 网上查的一般无法在python2中直接使用

  相关解决方案