有时候我们需要把一些信息传给前端,之后前端再传回来,若是遇到敏感信息就会被暴露,所以我们需要把它加密成一个token,待前端传回来的时候再进行解密。我们可以使用itsdangerous这个模块进行加密和解密操作
1.安装itsdangerous
pip install itsdangerous
2.简单使用
其实itsdangerous的用法有多种,我们这里只用给JSON加解密的方法,需要用到TimedJSONWebSignatureSerializer类的dumps()和loads()方法
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
# 传入秘钥和有效期(秒)
serializer = Serializer('abcd',300)
token = serializer.dumps({
'mobole':'13978488888'}).decode()
print(token) # 结果:eyJpYXQiOjE1OTk4MDEzNjEsImFsZyI6IkhTNTEyIiwiZXhwIjoxNTk5...
# serializer = Serializer('1234',300) 假如传入的秘钥不正确就会报错
try:
data = serializer.loads(token)
print(data) # 结果:{'mobole': '13978488888'}
except Exception as e:
print('解密失败')
3.封装成类
封装的好处就是方便调用,使代码业务代码更加简洁,我们这里简单封装一下
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from django.conf import settings
class SecretOauth(object):
def __init__(self):
# self.serializer = Serializer(secret_key='abcd',expires_in=300)
# 这里使用django配置文件里提供的秘钥
self.serializer = Serializer(secret_key=settings.SECRET_KEY,expires_in=300)
# 加密
def dumps(self,content_dict):
token = self.serializer.dumps(content_dict).decode()
return token
# 解密
def loads(self,token):
try:
content_dict = self.serializer.loads(token)
except Exception as e:
return None
return content_dict
if __name__ == '__main__':
res = SecretOauth().dumps(content_dict={
'mobile':'13978488888'})
print('加密后:', res)
res2 = SecretOauth().loads(res)
print('解密后:', res2)
print(res2.get('mobile'))