python之AES加密解密踩坑记录
研究了一下项目部分接口的加密传值,找开发要到了加密key以及偏移向量iv。根据AES的CBC加密模式设计函数对接口请求数据进行加密传参:
from Crypto.Cipher import AES
import base64
from global_SystemEnv import SystemEnv
from loguru import logger#加密
def encryptData(key:str, iv:str, plaintext:str)->str:""":param key:加密密匙:param iv:加密偏移量:param plaintext:需要加密的字符串"""# # 将key和iv转换为字节# key = bytes(key, encoding='utf-8')# iv = bytes(iv, encoding='utf-8')# 使用AES算法进行加密cipher = AES.new(key, AES.MODE_CBC, iv)# 对明文进行PKCS7填充plaintext = plaintext.replace(' ','').replace('\t','').replace('\n','').encode('utf-8') #去除所有空字符,换行符。缩进padding_length = 16 - len(plaintext) % 16padding = bytes([padding_length] * padding_length)padded_plaintext = plaintext + padding# 使用AES算法加密填充后的明文encrypted = cipher.encrypt(padded_plaintext)encryp_res = base64.b64encode(encrypted).decode('utf-8')#将加密后的数据进行base64编码logger.info(f'AES加密后的值为:{encryp_res}')return encryp_res #解密
def decryptData(key:str, iv:str, ciphertext:str)->str:""":param key:加密密匙:param iv:加密偏移量:param ciphertext:加密后的字符串"""# 将key和iv转换为字节# key = bytes(key, encoding='utf-8')# iv = bytes(iv, encoding='utf-8')# 对密文进行base64解码ciphertext = base64.b64decode(ciphertext)# 使用AES算法进行解密cipher = AES.new(key, AES.MODE_CBC, iv)decrypted = cipher.decrypt(ciphertext)# 去除解密后数据的PKCS7填充padding_length = decrypted[-1]decrypted = decrypted[:-padding_length]# 将解密后的数据转换为字符串decrypt_res = decrypted.decode('utf-8')logger.info('AES解密后的值为:{decrypt_res}')return decrypt_res
当我用加密及解密方法来对接口请求数据加密时,得到的加密结果与页面抓取的密文一致,但是在调试接口时发现密文却不一致。加密key和偏移向量iv都没有错,问题到底出在哪里?
注意看以上我改进后的代码这一行:
plaintext = plaintext.replace(' ','').replace('\t','').replace('\n','').encode('utf-8') #去除所有空字符,换行符,缩进。
下面来感受一下去除这些字符之后加密的差别:
key = SystemEnv.VUE_APP_API_ENCRYPT_KEY
iv = SystemEnv.VUE_APP_API_ENCRYPT_IV
data = """{"entity": "MU","accountNumber": 1700000156,"countdownName": "resetAccountPwd","language": "CHT","captchaId": "3VM07d","captchaText": "snwo","email": "990687322@qq.com","fullName": "chungkkedwin"
}"""#加密aes_data = encryptData(key,iv,data )print(aes_data)
输出结果:
与浏览器抓包格式一致:
不去除这些空字符串与换行符之类时加密:
可以看到两者的差别有多大,格式完全变了,而我们从excel读取出来的请求数据,一般都是字符串,如上的data变量,如果不对这些空格、换行符之类的进行处理,请求会失败。
python之AES加密解密踩坑记录相关推荐
- 使用Java读取 “Python写入redis” 的数据踩坑记录
https://my.oschina.net/u/2338224/blog/3061507 使用Java读取 "Python写入redis" 的数据踩坑记录 https://seg ...
- 用python实现AES加密解密
文章目录 背景 测试数据 代码 遗留问题 补充(2021.10.6) 背景 以蓝牙官方协议(V5.0)中的 sample data 为例子,看看怎么用 python 实现 AES 加密和解密. 测试数 ...
- windows中使用Python进行AES加密解密-文本文件加密工具
之前的文章http://blog.csdn.net/u013578500/article/details/77905924 简单介绍了一下使用PyCrypto模块实现对字符串的加密解密,里面有提到我利 ...
- C# Md5与AES加密解密源码记录
1.AES 加密32个x是解密密钥 AES_k 是公钥.EncryptByAES方法和De方法都需要用到 public static string EncryptByAES(string input, ...
- python与STM32串口通讯(踩坑记录)
1.环境 python端需要安装pyserial包和serial包,安装命令为 pip install pyserial 和 pip install serial.如果安装速度很慢可考虑使用清华镜像源 ...
- python 加密解密_python实现AES加密解密
本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下 (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原 ...
- aes加密算法python语言实现_C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]...
原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...
- AES加密解密python实现
1.前言 关于现代密码学算法,可以查看以下博客全面了解 CISSP考试要求里的"应用密码学"内容辅助记忆趣味串讲_晓翔仔的博客-CSDN博客 AES的细节知识,可以查阅 AES加密 ...
- Python crypto模块实现RSA和AES加密解密
Python crypto模块实现RSA和AES加密解密 Python的crypto是用于RSA加密解密,AES加密解密的. 一.RSA和AES简介 RSA加密算法是一种非对称加密算法.RSA 是19 ...
- Python打包工具Pyintealler打包py文件为windows exe文件过程及踩坑记录+实战例子
Python打包工具Pyintealler打包py文件为windows exe文件过程及踩坑记录+实战例子 目录 Python打包工具Pyintealler打包py文件为windows exe文件过程 ...
最新文章
- Excel向数据库插入数据和数据库向Excel导出数据
- 关键路径最早最迟开始时间
- 【NOIP2010】引水入城
- 对Bridge模式的理解
- 在STM32CubeMX生成的MDK5工程上添加RT-Thread Nano后双击工程名无法打开.map文件的解决方法
- 【洛谷 P3384】树链剖分【详解树链剖分】
- Java、JSP公文流转系统分析与实现
- 美团工作10个月心得
- 【Traffmonetizer】利用闲置电脑/VPS/安卓手机/树莓派来挂机
- 深度linux时间.年日调整,deepin深度商店中的Linux版应用体验分享(一)
- lp_solve 线性规划求解包的使用
- 免费报名 | 汇聚HBase大数据最前沿 Apache HBaseConAsia2019盛会火热来袭
- iOS10新特性及Xcode8兼容适配资料整理
- C语言适合什么开发,1.1.3 C语言适合什么开发
- 开发的阅读文档来源灵感
- 【机房收费系统】之结账
- C# winfrom中Flash播放使用axShockwaveFlash控件设置透明XP出现白色背景解决办法,仿QQ魔法表情效果...
- mysql 性能分析之 profiling
- 参考文献中英文人名_参考文献中英文人名的缩写规则精要.doc
- 南邮 | 离散数学实验二:集合上二元关系性质判定的实现