itsdangerous数据签名的基本用法

itsdangerous数据签名

itsdangerous是一个对数据进行加密签名的三方模块,保证数据的安全,默认使用HMAC和SHA-512进行签名

TimedJSONWebSignatureSerializer基本使用方法:

TimedJSONWebSignatureSerializer是JSON Web时间戳签名,签名后的格式个JWT的三段格式类似

  • 1.创建TimedJSONWebSignatureSerializer对象
  • 2.使用dumps()序列化和对数据签名
  • 3.使用loads()来验证签名和反序列化的数据代码示例(对QQ授权登录的openid签名)
对数据序列化和数据签名的方法
def generic_access_token(data):

    # 创建序列化器
    # 参数一:密钥,使用工程密钥
    # 参数二:时间戳
    serializer = Serializer(settings.SECRET_KEY,3600)

    # 进行序列化和数据签名
    token = serializer.dumps({'data':data})  # byte类型

    # 返回数据
    return token.decode()
对数据反序列化和验证签名的方法
def check_data(token):

    # 序列化器
    serializer = Serializer(settings.SECRET_KEY, 3600)

    # 反序列化和验证签名
    try:
        result = serializer.loads(token)
    except BadSignature:
        return None

    else:
        return result.get('data')

salt加盐

若要签名的内容相同,就需要进行加盐,即起一个别名,和Django的空间命名spacename类似

  • 代码示例
from itsdangerous.url_safe import URLSafeSerializer

签名加盐
s1 = URLSafeSerializer("secret-key", salt="activate")
s1.dumps(42)
>>>'NDI.MHQqszw6Wc81wOBQszCrEE_RlzY'

s2 = URLSafeSerializer("secret-key", salt="upgrade")
s2.dumps(42)
>>>'NDI.c0MpsD6gzpilOAeUPra3NShPXsE'

第二个序列化程序无法加载第一个序列化程序转储的数据,因为盐不同:
s2.loads(s1.dumps(42))
>>>报错:Traceback (most recent call last):
        ...
>>>itsdangerous.exc.BadSignature: Signature "MHQqszw6Wc81wOBQszCrEE_RlzY" does not match

只有具有相同salt的序列化程序才能加载数据:
s2.loads(s2.dumps(42))
>>>42
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值