diff --git a/猿人学练习/57js加密AES返回数据加密第三弹/aes-test.js b/猿人学练习/57js加密AES返回数据加密第三弹/aes-test.js new file mode 100644 index 0000000..210c792 --- /dev/null +++ b/猿人学练习/57js加密AES返回数据加密第三弹/aes-test.js @@ -0,0 +1,23 @@ +const CryptoJS = require("crypto-js"); +let secret_value = 'gRBuPrLd'; + +let secret = CryptoJS.enc.Utf8.parse(secret_value); + +// 将加密结果转换为字符串 +encrypted = "dQhIGlAcTdnWU456K3rsppWw0VNONWNuZC3Vm5+lvF8MGUUiQvGHMX6cRwlIgWM9K1Y+RU/AE9ZSin7zATIVEJK8A7spmboKSEA3833MZUOC/H+XmhrTVdwHDKpFhRlcUgaOTOqPql1X0im5TApZNgZDV0ZK3wT/FUxT9GGMT1545vFA0VmqQENhq94DtNiTivJP755tmpEjGCNMOCsPlC9LK51s4lEDBWVppHoUq1VolAhMmJH8+TKXTHbFXYbb1SVBIx2KNyPREP2/oeBv4KWXNiUUjseJK1Y+RU/AE9aoSPRsedoeBJK8A7spmboKOddnNI53/c5r+lQbS7KxsQ=="; + +// 解密,传入密文,密钥盒向量设置加密与填充模式 +let decrypted = CryptoJS.AES.decrypt(encrypted, secret, { + // mode 支持 CBC, CFB,CTB,ECB,OFB,OFB, 默认CBC + mode: CryptoJS.mode.ECB, + // NoPadding, zeropadding 默认Pkcs7 即 pkcs5 + padding: CryptoJS.pad.Pkcs7 +}); + +console.log(secret); +console.log(decrypted); + +// 将解密结果转换为utf8字符串 +d = CryptoJS.enc.Utf8.stringify(decrypted); + +console.log(d); diff --git a/猿人学练习/57js加密AES返回数据加密第三弹/aes_encrypt.py b/猿人学练习/57js加密AES返回数据加密第三弹/aes_encrypt.py new file mode 100644 index 0000000..6f56d38 --- /dev/null +++ b/猿人学练习/57js加密AES返回数据加密第三弹/aes_encrypt.py @@ -0,0 +1,26 @@ +import base64 +from Crypto.Cipher import AES + + +# AES +# 需要补位,str不是16的倍数那就补足为16的倍数 +def add_to_16(value): + while len(value) % 16 != 0: + value += '\0' + return str.encode(value) # 返回bytes + + +# 加密方法 +def encrypt(key, text): + aes = AES.new(add_to_16(key), AES.MODE_ECB) # 初始化加密器 + encrypt_aes = aes.encrypt(add_to_16(text)) # 先进行aes加密 + encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='utf-8') + return encrypted_text + + +# 解密方法 +def decrypt(key, text): + aes = AES.new(add_to_16(key), AES.MODE_ECB) # 初始化加密器 + base64_decrypted = base64.decodebytes(text.encode(encoding='utf-8')) + decrypted_text = str(aes.decrypt(base64_decrypted), encoding='utf-8').replace('\0', '') # 执行解密密并转码返回str + return decrypted_text diff --git a/猿人学练习/57js加密AES返回数据加密第三弹/main.py b/猿人学练习/57js加密AES返回数据加密第三弹/main.py index f40797d..053667f 100644 --- a/猿人学练习/57js加密AES返回数据加密第三弹/main.py +++ b/猿人学练习/57js加密AES返回数据加密第三弹/main.py @@ -1,19 +1,5 @@ -import json import requests -import base64 -from Crypto.Cipher import AES - - -def decrypt_aes(key, data): - """AES解密""" - print(key) - print(data) - real_data = base64.b64decode(data) - my_aes = AES.new(str(key).encode('utf-8'), AES.MODE_ECB) - decrypt_data = my_aes.decrypt(real_data) - decrypt_data_str = str(decrypt_data, 'utf-8').replace('\\r', '').replace('', '').replace('', '')\ - .replace('', '').replace('', '') - return json.loads(decrypt_data_str) +from aes_encrypt import decrypt def challenge57(page): @@ -25,18 +11,19 @@ def challenge57(page): } session.headers = headers response = session.request("POST", url, data=payload) - print(response.text) - return response.text + return response.json() def run(): data_num = 0 for page in range(1, 101): - response_text = challenge57(page) - result = json.loads(response_text).get('result') + response_json = challenge57(page) + print(response_json) + result = response_json.get('result') key = result[0:8] data = result[8:] - decrypt_data_dict = decrypt_aes(key, data) + + decrypt_data_dict = decrypt(key, data) data_list = decrypt_data_dict.get('data') print(data_list) for data in data_list: