注释都在代码里:

先撸客户端:

from Crypto.Cipher import AES
import base64,requests class Message(object):
def __init__(self,key,vi):
self.key = key
self.vi = vi def encryText(self,content):
length = 16
content = content.encode() # 在这里将字符串转化为bytes
count = len(content)
if count < length:
add = length - count
# 加密字符小于16位时,后面补空格
content = content + b'\0' * add
elif count > 16 and count % 16 != 0: # 位数大于16并且不是16的倍数时
add = length - (count % length)
# 后面补空格
content = content + b'\0' * add
# print("content被补齐后的样子",content,len(content))
# 提供的字典被处理之后:b'{"name": "python"}\x00\x00\x00\x00\x00\x00\x00\x00\x00\x
# 00\x00\x00\x00\x00' 长度是32
encryptor = AES.new(self.key,AES.MODE_CBC,self.vi)
# 加密
content = encryptor.encrypt(content)
# print("加密后的数据",content)
# b'\xcf.\xe9\ty\xdb\x80v\xf09\x85\xe5O\xc6\xb0\x13l\xbasR\xaad\xc3|N
# \xb1\xf2\xa2\x1et\x0cd' 为了更加安全所以用base64再加工
return base64.urlsafe_b64encode(content) if __name__ == "__main__":
import json
data = {"name":"python"}
encryptData = Message(b"the requests key",b"1234567890123456").encryText(json.dumps(data))
# print("得到的结果encryptData",encryptData)
# b'zy7pCXnbgHbwOYXlT8awE2y6c1KqZMN8TrHyoh50DGQ='
# 不传输,立马就解密,如下:
jiemimiyue = AES.new(b"the requests key", AES.MODE_CBC, b"1234567890123456")
xianjiema = base64.urlsafe_b64decode(encryptData)
jiemidata = jiemimiyue.decrypt(xianjiema).decode() # 解密完成之后转化为字符串
info = jiemidata.rstrip("\0")
print("解密后的数据", info)
d = json.loads(info)
print("最终数据",d)
# 传输代码如下:
# r = requests.post("http://127.0.0.1:8000/search_all/", data={"data": encryptData})
# print(r.json())

服务端:

from Crypto.Cipher import AES
import base64
from django.http import JsonResponse def getInfo(request):
data = request.POST.get("data", "")
key = b"the requests key"
vi = b"1234567890123456"
decryptor = AES.new(key, AES.MODE_CBC, vi)
# 解密并解码
info = decryptor.decrypt(base64.urlsafe_b64decode(data)).decode()
# 去掉右边空格
info = info.rstrip("\0")
import json
# 将字符串转成字典对象
d = json.loads(info)
return JsonResponse({"code": "ok"})

注意事项:

客户端与服务端key与vi一定要保持一致
key的长度必须为16、24或32位
vi长度必须为16位,否则将直接报错
加密的内容必须为16的整数倍,不足可与服务器端协商补全
加密的内容必须是bytes,不能是字符串。

使用Crypto对数据进行加密解密的更多相关文章

  1. iOS中使用RSA对数据进行加密解密

    RSA算法是一种非对称加密算法,常被用于加密数据传输.如果配合上数字摘要算法, 也可以用于文件签名. 本文将讨论如何在iOS中使用RSA传输加密数据. 本文环境 mac os openssl-1.0. ...

  2. 使用 GPG 对数据进行加密解密签名

    一:使用 GPG 对数据进行加密解密签名 基本的工具使用 1. GPG 是GNUPG 免费开源的gpg加密工具,和同pgp兼容,pgp收费. 2. 在mac上使用https://gpgtools.or ...

  3. 与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密

    原文:与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密 [索引页][源码下载] 与众不同 wi ...

  4. asp.net core 使用中间件拦截请求和返回数据,并对数据进行加密解密。

    原文:asp.net core 使用中间件拦截请求和返回数据,并对数据进行加密解密. GitHub demo https://github.com/zhanglilong23/Asp.NetCore. ...

  5. Crypto另外两段加密解密的代码

    第一段代码风格-平铺直叙: import sys from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex class p ...

  6. 序列化和反序列化在浏览器和 Web 服务器之间传递的数据、加密解密

    js中数组不能传递到后台,需进行json序列化: var data = new Array(); data.push({para1:name,para2:answer}); string data = ...

  7. from Crypto.Cipher import AES加密解密

    一.代码 from Crypto.Cipher import AES import base64 """ AES加密算法 """ #加密 d ...

  8. C# 数据的加密解密

    /// <summary> /// 加密数据 /// </summary> /// <param name="Text"></param& ...

  9. Cookie中存放数据l加密解密的算法

    public class CookieUtil { /** * * @param response HttpServletResponse类型的响应 * @param cookie 要设置httpOn ...

随机推荐

  1. Java截取视频文件缩略图

    /** * 截取视频第0帧的图片 */public static void videoImage(String filePath, String fileName,int widthdist, int ...

  2. PAT (Basic Level) Practise (中文)-1035. 插入与归并(25)

    PAT (Basic Level) Practise (中文)-1035. 插入与归并(25)   http://www.patest.cn/contests/pat-b-practise/1035 ...

  3. (2)JSTL的fmt国际化标签库

    format标签库:做国际化格式化,分两类 : 国际化核心标签:<fmt:setLocale>.<fmt:bundle>.<fmt:setBundle>.<f ...

  4. CSS - position属性小结

    Relative: 属于文档流,针对自身进行偏移: Absolute: 脱离文档流,针对最近的定位元素进行偏移,如果没有,则针对根元素,即body标签尽心偏移: Fixed: 和absolute基本一 ...

  5. Bootstrap 网页乱码

    问题:今天早上在实践bootstrap的时候,用EditPlus写代码,标签中包含了中文.在浏览器解析的时候中文部分生成的乱码.但是网页部分已经声明了使用utf-8的编码方式. 解决:网页字体正常显示 ...

  6. NoSQL 之 Morphia 操作 MongoDB

    上两篇文章:http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html http://www.cnblogs.com/hoojo/arch ...

  7. document节点的一些个性属性

    <ol> <li>document.head:返回文档的< head>节点:</li> <li>document.body:返回文档的< ...

  8. POJ-2251-地下城

    这题是一道简单的广搜题目,读入的时候,需要注意,如果是用scanf读入的话,就直接读取每行的字符串,不然的话,行尾的回车,也会被当成字符读入,这样的话,每次读取的数目就会小于我们想要的数目,因为每次把 ...

  9. [LUOGU] P2716 和谐的雪花

    https://www.luogu.org/problemnew/show/P2716 给出一个n*m的矩形,求里面边长最小的正方形,使得该正方形内最大值与最小值的差大于等于给定的K. 第一反应是二分 ...

  10. leepcode作业解析-5-15日

    1.删除排序数组中的重复项 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外 ...