itsdangerous模块 进行签名加密

 

  有时您只想将一些数据发送到不受信任的环境。但是如何安全地做到这一点?窍门涉及签名。仅提供您知道的密钥,您就可以对数据进行加密签名并将其移交给其他人。当您取回数据时,可以轻松地确保没有人篡改数据。

当然,接收者可以解码内容并查看包,但是除非拥有密钥,否则他们无法修改内容。因此,如果您将密钥保密且复杂,则可以。

在内部,ItsDangerous默认使用HMAC和SHA-512进行签名。最初的实现受到Django的签名模块的启发。它还支持JSON Web签名(JWS)。该库是BSD许可的。

示例:

  • 您可以序列化用户ID并在URL中签名,然后通过电子邮件将其发送给他们以取消订阅新闻通讯。这样,您无需生成一次性令牌并将其存储在数据库中。同一件事,带有任何类型的帐户激活链接和相似事物。

  • 签名的对象可以存储在cookie或其他不受信任的来源中,这意味着您不需要在服务器上存储会话,从而减少了必要的数据库查询次数。

  • 通常,签名信息可以安全地在服务器和客户端之间进行往返,这使它们对于将服务器端状态传递给客户端然后再传递给客户端非常有用。

 

参考官方文档地址:https://itsdangerous.palletsprojects.com/en/1.1.x/

安装

pip install itsdangerous

使用

使用例子:用户注册激活邮件链接的加密

from itsdangerous import TimedJSONWebSignatureSerializer as serializer
​
# ser = serializer('secretkey', 60)  # 设置60s 后过期
ser = serializer(settings.SECRET_KEY, 60) # 使用django配置的SECRET_KEY
info = {'confirm': 1}  # 用户身份信息,如user.id
res = ser.dumps(info)
print(res)  # 加密
# res: b'eyJhbGciOiJIUzUxMiIsImlhdCI6MTYwMjg5OTQwMSwiZXhwIjoxNjAyOTAzMDAxfQ.eyJjb25maXJtIjoxfQ.1drJiFptHyON3RsFAC_ak4q9ns_pWvvq8ic7a2arc3f-xTrjakq-XRnaWgb70fkU1q5HCH4DNgQnHCTo_dZVBw'
​
ser.loads(res)  # 解密
# 正常结果:{'confirm': 1}
# 如果加密时间已经过期,抛错:
# itsdangerous.exc.SignatureExpired: Signature expired

 


 

 

posted @ 2020-10-17 17:14  Deaseyy  阅读(165)  评论(0编辑  收藏  举报