我们知道HTTP是不安全的,所以在Django中,为了加密传输的数据(可以是密码、邮件、URL,类型可以是字符串、JSON、列表等等),可以使用
itsdangerous
进行
加密和解密
数据。
如加密一个URL的参数。
使用
itsdangerous
可以很方便的让我们进行可逆的加密解密。
pip install itsdangerous
文档:https://itsdangerous.palletsprojects.com/en/1.1.x/jws/
In[1]:from itsdangerous import TimedJSONWebSignatureSerializer
In[2]:serializer1 = TimedJSONWebSignatureSerializer(secret_key='secret-key', expires_in=3600)
In[3]:info = {'content':9527}
In[4]:res = serializer1.dumps(info).decode()
In[5]:res
Out[5]: 'eyJhbGciOiJIUzUxMiIsImlhdCI6MTU5MDE1MDQ0MywiZXhwIjoxNTkwMTU0MDQzfQ.eyJjb250ZW50Ijo5NTI3fQ.SyIcvnG8yOHPA1teNhK3htc50WgWHJxA9-4-6DS0Zlk4Q4zWV5GKUAv2axmhio4ry0YdQls5Lc1eoIZDR8Cvdw'
In[6]:serializer1.loads(res)
Out[6]: {'content': 9527}
In[7]:serializer1 = TimedJSONWebSignatureSerializer(secret_key='secret-key', expires_in=1)
In[8]:res = serializer1.dumps(info)
In[9]:serializer1.loads(res)
Traceback (most recent call last):
File "D:\Python3.7.5\lib\site-packages\IPython\core\interactiveshell.py", line 3319, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-26-9a4867386e07>", line 1, in <module>
serializer1.loads(res)
File "D:\Python3.7.5\lib\site-packages\itsdangerous\jws.py", line 205, in loads
date_signed=self.get_issue_date(header),
itsdangerous.exc.SignatureExpired: Signature expired
什么叫salt呢?salt盐,其实就是由服务器随机生成的一个字符串,但是要保证长度足够长,并且是真正随机生成的。然后把它和密码字符串相连接(任意规则连接)生成散列值。当两个用户使用了同一个密码时,由于随机生成的salt值不同,对应的散列值也将是不同的。这样一来,很大程度上减少了密码特征,攻击者也就很难利用自己手中的密码特征库进行破解。
——《图解HTTP》
- HTTP传输时,为了使数据更安全,可以加salt(随机字符串)再散列。
- isdangerous中,盐其实就是一个附加字符串,可以区别用途:
In[1]:from itsdangerous.url_safe import URLSafeSerializer
In[2]:s1 = URLSafeSerializer("secret-key", salt="activate")
In[3]:s1.dumps(42)
Out[3]:'NDI.MHQqszw6Wc81wOBQszCrEE_RlzY'
In[4]:s2 = URLSafeSerializer("secret-key", salt="upgrade")
In[5]:s2.dumps(42)
Out[5]:'NDI.c0MpsD6gzpilOAeUPra3NShPXsE'
In[1]:from itsdangerous import JSONWebSignatureSerializer
In[2]:s = JSONWebSignatureSerializer("secret-key", salt="Jc$@85idhhg1^&")
In[3]:res = s.dumps({"x": 42})
In[4]:res
Out[4]:'eyJhbGciOiJIUzI1NiJ9.eyJ4Ijo0Mn0.ZdTn1YyGz9Yx5B5wNpWRL221G1WpVE5fPCPKNuc6UAo'
In[5]:s.loads(res)
Out[5]: {'x': 42}
In[6]:s.dumps('1233145').decode()
Out[6]: 'eyJhbGciOiJIUzUxMiJ9.IjEyMzMxNDUi.3bDpp2x73YsS4w6p_5Dg_4sgO49iJyWCjZsiFIdLczjawsxVVH99Rszkc9qixMfD1BxIxJmtQRcUJrimQrCKyg'
In[7]:s.loads('eyJhbGciOiJIUzUxMiJ9.IjEyMzMxNDUi.3bDpp2x73YsS4w6p_5Dg_4sgO49iJyWCjZsiFIdLczjawsxVVH99Rszkc9qixMfD1BxIxJmtQRcUJrimQrCKyg')
Out[38]: '1233145'
还有其他的:
起因我们知道HTTP是不安全的,所以在Django中,为了加密传输的数据(可以是密码、邮件、URL,类型可以是字符串、JSON、列表等等),可以使用itsdangerous进行加密和解密数据。如加密一个URL的参数。加密前:http://127.0.0.1/user/1233145加密后:http://127.0.0.1/user/eyJhbGciOiJIUzUxMiJ9.IjEyMzMxNDUi.3bDpp2x73YsS4w6p_5Dg_4sgO49iJyWCjZsiFIdLczjawsxVVH
C.封装utils
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from meiduo_mall import settings
def generic_openid(openid):
s = Serializer(secret_key=settings.SECRET_KE
questions: itsdangerous用来解决什么问题,为什么需要用到itsdangerous?
安全的加密解密:
1、使用没有逆运算的公式,只能加密不能解密。
2、可逆,能加密解密。保证安全性——私钥。
itsdangerous内部默认使用了HMAC和SHA1来签名,基于 Django 签名模块。它也支持JSON Web 签名 (JWS)。
itsdang...
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
serializer = Serializer('secretkey', 3600)
info = {'confirm':1}
res = serializer.dumps(info)
Out[7]: b'eyJhbGciOiJIUzUxMiIsImlhdCI6MTYxMTIxODczOCwiZXhwIjoxNjExMjIyMzM4fQ.eyJjb25maX.
pip install Isdangerous
ItsDangerous 默认使用 HMAC 和 SHA-512 进行签名。最初的实现受到 Django 的签名模块的启发。它还支持 JSON Web 签名**(JWS)**。该库是 BSD 许可的。
所以一般都说 Django 的 Isdangerous,清晰了吧。
# 因为实在是...
安装命令:pip install itsdangerous
有时候你想向不可信的环境发送一些数据,但如何安全完成这个任务呢?解决的方法就是签名。使用只有你自己知道的密钥,来加密签名你的数据,并把加密后的数据发给别人。当你取回数据时,你就可以确保没人篡改过这份数据。
诚然,接收者可以破译内容,来看看你的包裹...
2、在视图类中导入itsdangerous模块和异常处理
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from itsdangerous import SignatureExpired # 异常
3、创建Tim...
#明文加密传输
#更多相关知识请看https://itsdangerous.readthedocs.io/en/latest/
from itsdangerous import URLSafeSerializer
s = URLSafeSerializer('secret-key')
print s.dumps([1, 2, 3, 4...
在开发过程中会遇到一些需要用户激活使用的链接,这些需要带有用户的相关信息,又不希望这些信息以明文的方式展现给用户,防止不放分子从中作恶,这时就可以使用itsdangerous来对数据进行加密,之后再对加密的数据进行解密得到用户信息,从而对该用户进行激活认证
具体在开发过程中的使用:
from itsdangerous import TimedJSONWebSignatureSeri...
pip install -U itsdangerous
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
为什么要用itsdangerous,是为了保证你的加密的数据没有被人修改,因为修改了就无法重新解出原数据,若超时了也无法解出内容,应用场景激活,发一个激活的网址给你,你若在一定时间内,未激活,会激活超时。
首先介绍下载pycharm中的安装:
安装命令:pip install itsdangerous
有时你想向一个不可信的环境发送一些数据,如何保证安全呢,答案是签名,使用只有你自己知道的秘钥(...