200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > JS逆向加解密——python 实现AES加解密

JS逆向加解密——python 实现AES加解密

时间:2018-10-10 23:09:25

相关推荐

JS逆向加解密——python 实现AES加解密

前言

写爬虫项目,做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字节需要补全时,补全规则跟填充方式相关,常见的填充方式有packs5和packs7,不用深究(除非你就想花大量时间研究算法),实际使用是一样的

AES 安装模块

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

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

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

pip install pycryptodome

具体使用

以下代码是AES ECB模式,CBC模式多了ivCBC ECB 其他使用方式代码结构基本一致,伙伴们自己根据实际使用修改

import base64from Crypto.Cipher import AESfrom 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模式下 , 具体填充的什么跟字符串长度有关系,解密时打印看看,然后去掉填充 ,才是真正的明文

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。