python 生成token_Python用摘要算法生成token及检验token

#封装成Django源码版#依赖Django运行环境,不可单独测试,需运行Django环境,#需要在settings配置文件中配置 OUT_TIME = 时间 ,以秒为单位

importosimporttimeimportbase64importhashlibimportimportlib

ENVIRONMENT_VARIABLE= "DJANGO_SETTINGS_MODULE"

classToken_hander():def __init__(self):

self.out_time=self.getOutTime()

self.time=self.timerpass

deftimer(self):returntime.time()defgetOutTime(self):

module=importlib.import_module(os.environ.get(ENVIRONMENT_VARIABLE))return getattr(module, "OUT_TIME",60) #在settings配置文件中找 OUT_TIME 变量,如果没有,默认60秒

defhax(self,str):"""摘要算法加密

:param str: 待加密字符串

:return: 加密后的字符串"""

if not isinstance(str,bytes): #如果传入不是bytes类型,则转为bytes类型

try:

str= bytes(str,encoding="utf8")exceptBaseException as ex:raise ValueError("'%s'不可被转换为bytes类型"%str)

md5=hashlib.md5()

md5.update("天王盖地虎erafe23".encode(encoding='utf-8'))

md5.update(str)

md5.update("992ksd上山打老虎da".encode(encoding='utf-8'))returnmd5.hexdigest()defbuild_token(self,message):"""hax_message: 待加密字符串内容 格式: '当前时间戳:message:过期时间戳'

:param message: 需要生成token的字符串

:param time: 过期时间

:return: token"""hax_message= "%s:%s:%s"%(str(self.time()),message,

str(float(self.time())+float(self.out_time)))

hax_res=self.hax(hax_message)

token= base64.urlsafe_b64encode(("%s:%s"%(hax_message,hax_res)).encode(encoding='utf-8'))return token.decode("utf-8")defcheck_token(self,token):""":param token: 待检验的token

:return: False or new token"""

try:

hax_res= base64.urlsafe_b64decode(token.encode("utf8")).decode("utf-8")

message_list= hax_res.split(":")

md5= message_list.pop(-1)

message= ':'.join(message_list)if md5 !=self.hax(message):#加密内容如果与加密后的结果不符即token不合法

returnFalseelse:if self.time() - float(message_list.pop(-1)) >0:#超时返回False

returnFalseelse:#token验证成功返回新的token

return self.build_token(message_list.pop(-1))exceptBaseException as ex:#有异常表明验证失败或者传入参数不合法

return False

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值