使用Crypto对数据进行加密解密
注释都在代码里:
先撸客户端:
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对数据进行加密解密的更多相关文章
- iOS中使用RSA对数据进行加密解密
RSA算法是一种非对称加密算法,常被用于加密数据传输.如果配合上数字摘要算法, 也可以用于文件签名. 本文将讨论如何在iOS中使用RSA传输加密数据. 本文环境 mac os openssl-1.0. ...
- 使用 GPG 对数据进行加密解密签名
一:使用 GPG 对数据进行加密解密签名 基本的工具使用 1. GPG 是GNUPG 免费开源的gpg加密工具,和同pgp兼容,pgp收费. 2. 在mac上使用https://gpgtools.or ...
- 与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密
原文:与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密 [索引页][源码下载] 与众不同 wi ...
- asp.net core 使用中间件拦截请求和返回数据,并对数据进行加密解密。
原文:asp.net core 使用中间件拦截请求和返回数据,并对数据进行加密解密. GitHub demo https://github.com/zhanglilong23/Asp.NetCore. ...
- Crypto另外两段加密解密的代码
第一段代码风格-平铺直叙: import sys from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex class p ...
- 序列化和反序列化在浏览器和 Web 服务器之间传递的数据、加密解密
js中数组不能传递到后台,需进行json序列化: var data = new Array(); data.push({para1:name,para2:answer}); string data = ...
- from Crypto.Cipher import AES加密解密
一.代码 from Crypto.Cipher import AES import base64 """ AES加密算法 """ #加密 d ...
- C# 数据的加密解密
/// <summary> /// 加密数据 /// </summary> /// <param name="Text"></param& ...
- Cookie中存放数据l加密解密的算法
public class CookieUtil { /** * * @param response HttpServletResponse类型的响应 * @param cookie 要设置httpOn ...
随机推荐
- bootstrap历练实例:复选框或单选按钮作为输入框组的前缀或后缀
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- eclips配置
新建空workspace import... configMathod:main:project:eFT-Debug@eFTSlnC/C++ Aplication /media/B/testspa2. ...
- C# Excel常用控件总结
参考:https://blog.csdn.net/waterstar50/article/details/80590355 1.ClosedXML2.EPPlus 教程:http://www.cnbl ...
- verilog random使用
“$random函数调用时返回一个32位的随机数,它是一个带符号的整形数...”,并给出了一个例子: _________________________________________________ ...
- laravel中migrate的使用
migration的使用是大大提高了我们开发的效率,数据库迁移大大的方便了我们.今天我就来给大家分享下migration 首先: laravel提供了我们一些基本的建表的规范: 表名:通常用名词+s的 ...
- docker:安装mysql
文章来源:https://www.cnblogs.com/hello-tl/p/9234429.html 1.添加镜像 docker pull mysql 2.在/data下新建文件夹mysql,进入 ...
- 常用模块之configpaser与shutil
configparser模块 定义:configparser翻译为配置解析,即它是用来解析配置文件的 配置文件:用于编写程序的配置信息的文件 配置文件编写格式 配置文件中只允许出现两种类型的数据 se ...
- python基础——14(shelve/shutil/random/logging模块/标准流)
一.标准流 1.1.标准输入流 res = sys.stdin.read(3) 可以设置读取的字节数 print(res) res = sys.stdin.readline() print(res) ...
- Android开发——Activity启动模式详解
1. Activity的启动模式 本文原创,转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52054893 1.1 Standard标 ...
- unittest编写Web测试用例
案例:百度搜索关键词:“unittest” test_baidu.py: from selenium import webdriver from time import sleep import un ...