研究了一下项目部分接口的加密传值,找开发要到了加密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加密解密踩坑记录相关推荐

  1. 使用Java读取 “Python写入redis” 的数据踩坑记录

    https://my.oschina.net/u/2338224/blog/3061507 使用Java读取 "Python写入redis" 的数据踩坑记录 https://seg ...

  2. 用python实现AES加密解密

    文章目录 背景 测试数据 代码 遗留问题 补充(2021.10.6) 背景 以蓝牙官方协议(V5.0)中的 sample data 为例子,看看怎么用 python 实现 AES 加密和解密. 测试数 ...

  3. windows中使用Python进行AES加密解密-文本文件加密工具

    之前的文章http://blog.csdn.net/u013578500/article/details/77905924 简单介绍了一下使用PyCrypto模块实现对字符串的加密解密,里面有提到我利 ...

  4. C# Md5与AES加密解密源码记录

    1.AES 加密32个x是解密密钥 AES_k 是公钥.EncryptByAES方法和De方法都需要用到 public static string EncryptByAES(string input, ...

  5. python与STM32串口通讯(踩坑记录)

    1.环境 python端需要安装pyserial包和serial包,安装命令为 pip install pyserial 和 pip install serial.如果安装速度很慢可考虑使用清华镜像源 ...

  6. python 加密解密_python实现AES加密解密

    本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下 (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原 ...

  7. aes加密算法python语言实现_C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]...

    原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...

  8. AES加密解密python实现

    1.前言 关于现代密码学算法,可以查看以下博客全面了解 CISSP考试要求里的"应用密码学"内容辅助记忆趣味串讲_晓翔仔的博客-CSDN博客 AES的细节知识,可以查阅 AES加密 ...

  9. Python crypto模块实现RSA和AES加密解密

    Python crypto模块实现RSA和AES加密解密 Python的crypto是用于RSA加密解密,AES加密解密的. 一.RSA和AES简介 RSA加密算法是一种非对称加密算法.RSA 是19 ...

  10. Python打包工具Pyintealler打包py文件为windows exe文件过程及踩坑记录+实战例子

    Python打包工具Pyintealler打包py文件为windows exe文件过程及踩坑记录+实战例子 目录 Python打包工具Pyintealler打包py文件为windows exe文件过程 ...

最新文章

  1. Excel向数据库插入数据和数据库向Excel导出数据
  2. 关键路径最早最迟开始时间
  3. 【NOIP2010】引水入城
  4. 对Bridge模式的理解
  5. 在STM32CubeMX生成的MDK5工程上添加RT-Thread Nano后双击工程名无法打开.map文件的解决方法
  6. 【洛谷 P3384】树链剖分【详解树链剖分】
  7. Java、JSP公文流转系统分析与实现
  8. 美团工作10个月心得
  9. 【Traffmonetizer】利用闲置电脑/VPS/安卓手机/树莓派来挂机
  10. 深度linux时间.年日调整,deepin深度商店中的Linux版应用体验分享(一)
  11. lp_solve 线性规划求解包的使用
  12. 免费报名 | 汇聚HBase大数据最前沿 Apache HBaseConAsia2019盛会火热来袭
  13. iOS10新特性及Xcode8兼容适配资料整理
  14. C语言适合什么开发,1.1.3 C语言适合什么开发
  15. 开发的阅读文档来源灵感
  16. 【机房收费系统】之结账
  17. C# winfrom中Flash播放使用axShockwaveFlash控件设置透明XP出现白色背景解决办法,仿QQ魔法表情效果...
  18. mysql 性能分析之 profiling
  19. 参考文献中英文人名_参考文献中英文人名的缩写规则精要.doc
  20. 南邮 | 离散数学实验二:集合上二元关系性质判定的实现

热门文章

  1. [python]7-6 学号解析(PTA)
  2. 有关心才有判断,之后才有行动—读龙大侠文章有感
  3. PTA题目 分段计算居民水费
  4. Vue history路由模式 apache配置上线
  5. 江南水乡,西塘赏樱花
  6. 您的开发团队用的什么研发项目管理工具?
  7. 实用:python打印随机的ID码(产品序列号),如0001,abadicddws的格式
  8. 金融证券公司如何实现BI部署?这个案例很典型
  9. 推荐7个能让我玩上一天的网站,必须一看!
  10. Java的高薪潮是否已经过去?