前言

  • 写爬虫项目,做JS逆向或者APP逆向时,经常遇到网站的很多参数都经过AES加密解密,用python实现AES加解密是非常简单的,免去了扣JS代码,并且实现格式固定,所以本文提供实现好的AES加解密代码,方便使用,不用到处去找了

 AES 简绍 

  • AES是一种对称加密,即加密与解密使用的秘钥是一个 ,数据类型为bytes
  • 密钥必须是16个字节,加密的文本必须是16字节的倍数。
  • 被加密的明文是str类型(需转为bytes),得到的加密后的结果也是bytes类型,明文必须为16字节或者16字节的倍数的字节型数据,如果不够16字节需要进行补全
  • AES 加密最常用的模式就是 ECB模式 和 CBC 模式,区别就是 ECB 不需要 iv偏移量,而CBC需要
  • 明文不够16字节需要补全时,补全规则跟填充方式相关,常见的填充方式有packs5packs7, 不用深究(除非你就想花大量时间研究算法),实际使用是一样的

AES 安装模块

  • crypto这个模块的安装有点小坑,需要注意。

  • crypto,pycrypto,pycryptodome的功能是一样的。

  • crypto与pycrypto已经没有维护了,所以直接都用 pycryptodome 就行了,安装命令如下

    pip install pycryptodome

具体使用

  •  以下代码是AES ECB模式,
  • CBC模式多了iv
  • CBC  ECB 其他使用方式代码结构基本一致,伙伴们自己根据实际使用修改
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad  # pad 实现自动填充 无需手写判断字符长度再进行填充  很方便def aes_encrypt(key=None, data_s=None):  # 加密函数aes = AES.new(key=key.encode('utf-8'), mode=AES.MODE_ECB)raw = pad(data_s.encode('utf-8'), 16)  # 注意 AES ECB 模式填充的不是0,填充的是特殊符号,由明文长度决定print(raw)  # b'pachongnixianglaoyao\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c'en_str = aes.encrypt(raw)res = base64.b64encode(en_str).decode('utf-8')return resdef decrypt(key=None, data=None):  # 解密函数res = base64.b64decode(data.encode("utf-8"))aes = AES.new(key.encode('utf-8'), mode=AES.MODE_ECB)msg = aes.decrypt(res).decode("utf-8")  # msg是填充后的明文 AES ECB模式填充的不是0,填充的是特殊符号,解密时最好打印看下return msg  # 这里是个坑 不能直接返回msg 要去掉填充 用replace() 替换掉填充if __name__ == "__main__":# key的长度需要补长(16倍数),补全方式根据情况而定# key字符长度决定加密结果,长度16:加密结果AES(128),长度32:结果就是AES(256)print(aes_encrypt("ABCDEFGHIJKMNOPQ", 'pachongnixianglaoyao'))print(decrypt(key="ABCDEFGHIJKMNOPQ", data='5DoJIAzqDLW8cA3Yy1ASjw47bdDn8McNc32hfLhfq+g='))# b'pachongnixianglaoyao\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c'# 5DoJIAzqDLW8cA3Yy1ASjw47bdDn8McNc32hfLhfq+g=# pachongnixianglaoyao

特别需要注意的是,网上很多文章说不足16位时填充0或者空格,那是误导人呢,AES加密ECB模式下 , 具体填充的什么跟字符串长度有关系,解密时打印看看,然后去掉填充 ,才是真正的明文

JS逆向加解密——python 实现AES加解密相关推荐

  1. python实现AES加解密文档里英文字符串

    python实现AES加解密文档里英文文章 AES加解密文档里英文字符串 英文文档中也包含了空格与回车符 加密过程 首先读取文件中的内容 将文档中的内容读取,然后将其赋予你申请的变量 在我的实验中我的 ...

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

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

  3. 记一次Java AES 加解密 对应C# AES加解密 的一波三折

    最近在跟三方对接 对方采用AES加解密 作为一个资深neter Ctrl CV 是我最大的优点 所以我义正言辞的问他们要了demo java demo代码: public class EncryptD ...

  4. php5.0 aes加解密,PHP的aes加解密算法

    说明: 1. php的aes算法,加密时会存在空格,0,\0等方式进行补长,所以解密后需要进行trim操作,才能得到原数据串 2. aes加密后进行base64_encode,但是解密时,直接用aes ...

  5. JS 逆向的时候 Python 如何调用 JavaScript 代码?「建议收藏哦!」

    你好,我是悦创.关注公众号:AI悦创,抢先阅读优质文章. 公众号原文:https://mp.weixin.qq.com/s/PYEiSMgP2LT0DmcHX08PCw 博客原文:https://ww ...

  6. 用python实现AES加密解密

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

  7. python 月份加减,Python日期的加减等操作的示例

    本文介绍了Python日期的加减等操作的示例,分享给大家,也给自己留个笔记 1. 日期输出格式化 所有日期.时间的api都在datetime模块内. 1. datetime => string ...

  8. android base64解密,android Base64 AES加密解密

    Android Base64代码如下: // 加密传入的数据是byte类型的,并非使用decode方法将原始数据转二进制,String类型的数据 使用 str.getBytes()即可 String ...

  9. c php aes加密解密,php的AES加密解密

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. $privateKey = "1234567812345678"; $ ...

最新文章

  1. ceph的数据存储之路(6) -----pg的创建
  2. AngularJs学习
  3. CPU中的主要寄存器:有六类寄存器:指令寄存器(IR)、程序计数器(PC)、地址寄存器(AR)、数据寄存器(DR)、累加寄存器(AC)、程序状态字寄存器(PSW)
  4. Mybatis学习链接
  5. 无法连接iphone软件更新服务器_NX许可证错误:无法连接至许可证服务器系统。SPLM_LICENSE_SERVER错误[15]...
  6. CSITOOL安装接收CSI数据
  7. Jmeter基础使用
  8. a5 1c语言实现,初识C语言1_qq5fb3b05a5f322的技术博客_51CTO博客
  9. 解决cdh4.5.0下 MAP任务看不到状态
  10. 线程协作--wait,notify:经典消费者生产者
  11. Reflex WMS入门系列三十:不使用RF功能做上架
  12. 计算机组成原理实验心得2000字,计算机组成原理实验一:基础汇编语言程序设计实验...
  13. idea的工具栏显示
  14. 道长运维之CPU负载高
  15. plt的默认风格/样式设置 or 将plt.rcParams恢复恢复到默认参数设置
  16. 服务器防火墙关闭开机自启解决方案
  17. (四十五:2021.08.05)《利用深度学习对ecg信号进行分割》
  18. 监听队列中linux方法ss -a,Linux命令:ss命令
  19. coco数据集大小分类_VOC、COCO数据集类别
  20. windows技巧之添加右键菜单

热门文章

  1. 尚硅谷MySQL笔记
  2. 浅谈PS CC 2020——适合新手学习的最新版软件
  3. php音频上传失败,flash导入音乐失败怎么办
  4. 基于单片机的自动追日系统设计_一种太阳能光伏支架自动追日系统的制作方法...
  5. 计算机连接到网络通信介质的物理设备,计算机应用基础.doc
  6. Kettle的一些常见问题
  7. facebook新闻页ListView优化
  8. Ubuntu16.04下RealSense D435i的安装和使用
  9. 安徽省谷歌卫星地图下载
  10. libvirt入门并创建第一个虚拟机