python 开发中token加解密的快速实用

itsdangerous的介绍

itsdangerous是python的第三方库,其内部是基于HMAC和SHA1进行数据加密的,是一种安全的基于加密hash函数和共享密钥的消息认证协议。其具体的内部实现机制我们这里不做深究,我们暂时可以把他理解为一种较为复杂且安全的对称型加密算法。

itsdangerous的使用场景

在当下的web编程中,对于安全的考量是决定web编程是否成功甚至合格的重要因素。而确实如此,当下随着移动互联网的普及与推进。web编程也做到了安全,比如我们的手机接收验证码进行账户验证的机制(属于非对称加密算法)。而在python的web编程或者通信中同样有着优秀的加密算法。

itsdangerous就是其中较为优秀的加密第三方库,其主要的应用场景就是我们的基于数字签名,数字令牌的加解密,简单的来说当你在开发web或者接口编程时你想把一串信息告诉对方,但你又不能确定对方的身份。itsdangerous则提供了简单的加密功能。

准备工作

首先保证你已安装了这个库,否则的话
pip install itsdangerous

具体使用

其实真正使用这个库的大多数是这个库的TimedJSONWebSignatureSerializer类,是不是感觉很长。从类名中我们也能看出 出现了json 和 time 这个类会有 时间和序列化的特性。其实它就是一个具有时间特性的序列化器。

数据加密

from itsdangerous import TimedJSONWebSignatureSerializer as Seria
secret_key = 'suijizifuchuan'

def encryption(expiration=60,**kwargs):
    seria = Seria(secret_key,expiration)
    ser = seria.dumps(kwargs)
    return ser

定义了一个加密函数
其中secret_key 的值时随机的一组 字符串,我们可以把它理解为秘钥。expiration 为这个加密对象的过期时间
其输出结果如下图所示

输出结果
if __name__ == "__main__":

    ser = encryption(id='123')

    print(ser,"这是被加密的字符串")

在这里插入图片描述
其输出结果为一串字符串编码,可以看出这是一组bytes类型的数据,如需要的话可以通过encode函数把他转换为字符串使用。
下面对其进行解码
定义了解码的函数

解码函数
def decrypt(ser):
    seria = Seria(secret_key)
    res =seria.loads(ser)
    return res

下面对其进行解码操作

if __name__ == "__main__":

    ser = encryption(id='123')

    print(ser,"这是被加密的字符串")

    res = decrypt(ser)

    print(res,"这是要被解密的字符串")

其运行结果如下所示:
在这里插入图片描述

测试多组参数
ser = encryption(id='123',name='zhangsan',sex='girl')

    print(ser,"这是被加密的字符串")

    res = decrypt(ser)

    print(res,"这是要被解密的字符串")

在这里插入图片描述
可以看出,这个序列化器是支持多种参数的。

时间特性的验证

if __name__ == "__main__":

    ser = encryption(expiration=1,id='123',name='zhangsan',sex='girl')

    print(ser,"这是被加密的字符串")
    time.sleep(2)
    res = decrypt(ser)

    print(res,"这是要被解密的字符串")

我们把过期时间定为两秒,这时候定义一个两秒的延迟
在这里插入图片描述
这时候则会报一个错误

最后优化

我们都知道bytes数据是不利于传播的,我们可以把他转化为字符串
再解密的时候再转为bytes类型

import time
from itsdangerous import TimedJSONWebSignatureSerializer as Seria
secret_key = 'suijizifuchuan' #这是秘钥,随机给的,加密和解密需要使用同一个秘钥


def encryption(expiration=60,**kwargs):
    seria = Seria(secret_key,expiration)
    ser = seria.dumps(kwargs).decode('utf-8')
    return ser


def decrypt(ser):
    seria = Seria(secret_key)
    res =seria.loads(ser.encode('utf-8'))
    return res

if __name__ == "__main__":

    ser = encryption(id='123',name='zhangsan',sex='girl')

    print(ser,"这是被加密的字符串")
    time.sleep(2)
    res = decrypt(ser)

    print(res,"这是要被解密的字符串")
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值