有网站在前端页面上对某些数据进行js加密后渲染填充的,通过抓包拿到解密的方法,但有大量的数据想通过python来解密转换,所以就将js转python语法来写了。
原JS加密方法
var CryptoJS = require('crypto-js');
var IV = '8NONwyJtHesysWpM';
var KEY = '1234567898882222';
function decrypt(String) {
var key = CryptoJS.enc.Utf8.parse(KEY);
var iv = CryptoJS.enc.Utf8.parse(IV);
var decrypted = CryptoJS.AES.decrypt(str, key, {
iv: iv,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
var data = 'lJ3vNKkzYYDUVuG5BbRjqXBE+5Cqa8xpR/H18ti+rAM=';
var decode = decrypt(data);
console.log(decode);
转Python的库解密
python安装Crypto过程中可能会出现问题,所以在window系统中需pycryptodome这个库解决,pycrypto、pycrytodome和crypto是一个东西,crypto在python上面的名字是pycrypto,它是一个第三方库,但是已经停止更新三年了,所以不建议安装这个库;
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import base64
from Crypto.Cipher import AES
IV = "8NONwyJtHesysWpM"
KEY = '1234567898882222'
class Crypto_Test(object):
def __init__(self):
self.key = KEY
self.mode = AES.MODE_CBC
#解密函数
def decrypt(self, text):
decode = base64.b64decode(text)
cryptor = AES.new(self.key, self.mode,IV)
text = cryptor.decrypt(decode)
return text
if __name__ == '__main__':
data = "lJ3vNKkzYYDUVuG5BbRjqXBE+5Cqa8xpR/H18ti+rAM="
aes = Crypto_Test()
res = aes.decrypt(data)
print(res)
网友评论