注释都在代码里:

先撸客户端:

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. 【树形dp 最长链】bzoj1912: [Apio2010]patrol 巡逻

    富有思维性的树形dp Description Input 第一行包含两个整数 n, K(1 ≤ K ≤ 2).接下来 n – 1行,每行两个整数 a, b, 表示村庄a与b之间有一条道路(1 ≤ a, ...

  2. (5)zabbix配置详解

    zabbix配置介绍 zabbix配置内容比较多,我们要分为9大块来讲解.分别如下:1.主机与组不用多数,顾名思义,他是添加主机配置与组配置. 2.监控项需要监控的项目,例如服务器负载可以使一个监控项 ...

  3. python列表的增删改查用法

    列表,元组 查 索引(下标) ,都是从0开始 切片 .count 查某个元素的出现次数 .index 根据内容找其对应的位置 "haidilao ge" in a 增加 a.app ...

  4. biological clock

    '''this application aimed to cauculate people's biological block about emotional(28), energy(23),int ...

  5. cdev结构体

    在内核源码include/linux/cdev.h里对cdev结构体的定义: struct cdev { struct kobject kobj; // 内嵌的kobject对象  struct mo ...

  6. ZOJ 2058 The Archaeologist's Trouble II(贪心+模拟)

    [题目大意] 一个n高的塔,由@ * ?三种字符组成.每行相邻两个字符不能相邻. '?' 表示未确定是 '@' 还是 '*' . 求'@' 可能出现的最多和最少次数. [分析] 在可以填的情况下 先填 ...

  7. STM32中如何对printf函数重定向

    通过USART1向计算机的串口调试助手打印数据,或者接收计算机串口调试助手的数据,接下来我们现STM32工程上的printf()函数,方便用于程序开发中调试信息的打印. 方法一:使用MicroLIB库 ...

  8. Android自动化测试Uiautomator--UiCollection接口简介

    这个对象可以理解为一个对象的集合,因为UiSelector描述后得到的有可能是多个满足条件的控件集合,因此可以用来生成UiCollection,继承自UiObject. 用于枚举一个容器的用户界面(U ...

  9. Hive中文注释乱码解决方案

    本文来自网易云社区 作者:王潘安 快速解决方法 目前的hive客户端在执行desc tablexxx和show create table xxx命令的时候,字段的中文注释会出现乱码情况,如(????) ...

  10. Silverlight客户端加载DWG图纸方案

    前段时间一直再研究怎么才能在Silverlight客户端加载 DWG图纸,ArcGIS API For Silverlight中可以加载Shp文件,但是不能加载DWG,最后想出了一个方法步骤如下: 1 ...