小结,加密与解密
加密
# 导入一个类
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
# 获得一个加密器对象
# 加密器 = 类名(盐,过期时间)
obj = Serializer("yan", 3)
# 对数据加密
data = {"msg":"我代表一个数据", "li":['我代表列表', ('我代表元组',)]}
mi = obj.dumps(data)
print('对复杂的类型都可以进行加密')
print(mi)
解密
# 创建另一个加密器对象,用于解密,使用相同的盐
obj2 = Serializer("yan")
print('收到的加密内容为:',mi)
# 对密文进行解密
yuanwen = obj2.loads(mi)
print('解密后的内容')
print(yuanwen)
不安全的传输方式
通过这样的方式进行数据传送,十分的不安全
如果用户发现了路径的规律,它可以自己手动的把19修改为其它数据
就会造成不好的后果
解决办法 isdangerous模块
ItsDangerous-ItsDangerous文档(1.1.x)
https://itsdangerous.readthedocs.io/en/1.1.x/
isDangerous文档 ! 很危险 ! - HH2030的博客 - CSDN博客
https://blog.csdn.net/HH2030/article/details/80964380
简言之:
这是一个可以给数据加密,同时可以给加密数据解密的一个模块
安装模块
pip install itsdangerous
使用小结
》获得加密器对象
加密器对象 = 模块名.类名(盐,过期时间秒数)
itsdangerous.TimedJSONWebSignatureSerializer(盐,秒数)
》加密
加密器对象.dumps(数据)
加密得到一段密文,是bytes数据类型
如果不喜欢,可以decode一下转变为str类型
》解密
加密器对象.loads(加密的数据)
解密需要接收bytes类型的数据
如果收到的密文是str类型,可以把它encode一下,转为bytes再进行解密
》时效性
如果加密的内容过期了
解密时会报错
可以根据解密时是否报错
判断这个密文的时效性
导入类
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
这个是超长的一个单词! 但是却见名知义
得到加密器对象
# 导入一个类
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
# 获得一个加密器对象
# 加密器 = 类名(盐,过期时间)
obj = Serializer("yan", 3)
print('Serializer 类对象')
print(obj)
利用加密器对象对数据进行加密
例子对一个复杂的数据进行加密
# 导入一个类
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
# 获得一个加密器对象
# 加密器 = 类名(盐,过期时间)
obj = Serializer("yan", 3)
# 对数据加密
data = {"msg":"我代表一个数据", "li":['我代表列表', ('我代表元组',)]}
mi = obj.dumps(data)
print('对复杂的类型都可以进行加密')
print(mi)
对数据进行解密
发送数据的时候,会对数据加密
接收方会拿到一个加密了的内容
作为接收方
需要解密,拿到内容原文
》解密练习源码
# 导入一个类
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
# 获得一个加密器对象
# 加密器 = 类名(盐,过期时间)
obj = Serializer("yan", 3)
# 对数据加密
data = {"msg":"我代表一个数据", "li":['我代表列表', ('我代表元组',)]}
mi = obj.dumps(data)
# 创建另一个加密器对象,用于解密,使用相同的盐
obj2 = Serializer("yan")
print('收到的加密内容为:',mi)
# 对密文进行解密
yuanwen = obj2.loads(mi)
print('解密后的内容')
print(yuanwen)
时效性的测试
一个三秒钟的密码
四秒钟以后,再去解密
关注报错
关注类型
调试源码
# 导入一个类
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
# 获得一个加密器对象
# 加密器 = 类名(盐,过期时间)
obj = Serializer("yan", 3)
# 对数据加密
data = {"msg":"我代表一个数据", "li":['我代表列表', ('我代表元组',)]}
mi = obj.dumps(data)
print('密文创建好了,内容是', mi)
print('密文只有三秒钟生命,四秒后破解密文试一试')
import time
time.sleep(4)
# 创建另一个加密器对象,用于解密,使用相同的盐
obj2 = Serializer("yan")
print('收到的加密内容为:')
print(mi)
# 对密文进行解密
yuanwen = obj2.loads(mi)
print('解密后的内容')
print(yuanwen)
报错
C:\ProgramData\Anaconda3\python.exe G:/dailyfresh/a0test/01testisdangerous.py
密文创建好了,内容是 b'eyJhbGciOiJIUzUxMiIsImlhdCI6MTU2OTI0MjI4NiwiZXhwIjoxNTY5MjQyMjg5fQ.eyJtc2ciOiLmiJHku6PooajkuIDkuKrmlbDmja4iLCJsaSI6WyLmiJHku6PooajliJfooagiLFsi5oiR5Luj6KGo5YWD57uEIl1dfQ.pjSiI6bDwWOmVOSa2-JtvbBO4wP1vfuTej1Q31L7gppWjr7CCi8PEVyItCwEmuh-jJiaSA0I_ARObg06-lXPHA'
密文只有三秒钟生命,四秒后破解密文试一试
收到的加密内容为:
b'eyJhbGciOiJIUzUxMiIsImlhdCI6MTU2OTI0MjI4NiwiZXhwIjoxNTY5MjQyMjg5fQ.eyJtc2ciOiLmiJHku6PooajkuIDkuKrmlbDmja4iLCJsaSI6WyLmiJHku6PooajliJfooagiLFsi5oiR5Luj6KGo5YWD57uEIl1dfQ.pjSiI6bDwWOmVOSa2-JtvbBO4wP1vfuTej1Q31L7gppWjr7CCi8PEVyItCwEmuh-jJiaSA0I_ARObg06-lXPHA'
Traceback (most recent call last):
File "G:/dailyfresh/a0test/01testisdangerous.py", line 20, in <module>
yuanwen = obj2.loads(mi)
File "C:\ProgramData\Anaconda3\lib\site-packages\itsdangerous\jws.py", line 205, in loads
date_signed=self.get_issue_date(header),
itsdangerous.exc.SignatureExpired: Signature expired
Process finished with exit code 1
报错类型
超时过期的密码,很好很强大
下一个目标:应用此法,保护激活URL的安全
下一集完成