使用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 ...
随机推荐
- java在线聊天项目0.3版本 制作客户端窗体,实现发送按钮和回车发送信息功能,使用ActionListener监听事件中actionPerformed方法(用内部类和匿名内部类两种方法)
方法一,使用匿名内部类的监听方法,因方法一致代码稍冗余 package com.swift; import java.awt.BorderLayout; import java.awt.Color; ...
- 对于WebAssembly编译出来的.wasm文件js如何调用
WebAssembly也叫浏览器字节码技术 这里就不过多的解释了网上很多介绍 主要是让大家知道在js里面如何调用执行它,我之前看WebAssemblyAPI时候反正是看得一脸懵逼 也是为了大家能更快的 ...
- python 连接redis cluster
#!/usr/bin/env python # encoding: utf-8 #@author: 东哥加油! #@file: clear_pool.py #@time: 2018/8/28 17:0 ...
- pip install mysqlclient 报错:error: Microsoft Visual C++ 14.0 is required.
解决办法: 1. 在网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载对应的whl文件,如我的环境是python3.7.2 windows32位版本 ...
- 【OS_Linux】三大文本处理工具之sed命令
1.sed命令的简介及用法 sed:即为流编辑器,“stream editor”的缩写.他先将源文件读取到临时缓存区(也叫模式空间)中,再对满足匹配条件的各行执行sed命令.sed命令只针对缓存区中的 ...
- grub加密。
一.介绍 安全无小事 linux系统的安全分为很多方面,什么端口啊,什么网络啊,听着都特么烦,今天谈谈最简单明显的密码安全. 二.单用户模式 单用户模式个人觉得相当有用,可以用来修复系统,修改密码… ...
- Python全栈工程师之html学习笔记
https://www.bilibili.com/video/av15241731 笔记来源:黑马程序员 HTML(Hyper Text Markup Language):超文本标签语言 HTML标签 ...
- shell中的$(( )) 的用途:主要用在整数的运算$(( a+b*c ))
$ a=5; b=7; c=2 $ echo $(( a+b*c ))//注意在进行这些运算时必须是双括号 $ echo $(( (a+b)/c )) $ echo $(( (a*b)%c))
- python中判断字符串是否为中文
判断字符串是否在中文编码范围内 for c in s: if not ('\u4e00' <= c <= '\u9fa5'): return False ...
- luogu1640 [SCOI2010]连续攻击游戏
二分图匹配,一边是属性值,一边是武器 #include <iostream> #include <cstring> #include <cstdio> using ...