Initialize encryption and JavaScript reverse-engineering study repository
Document the project structure and setup while excluding local dependencies and IDE settings. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
60
对称加密-AES-2026-08-24/1. js环境实现aes加解密.js
Normal file
60
对称加密-AES-2026-08-24/1. js环境实现aes加解密.js
Normal file
@@ -0,0 +1,60 @@
|
||||
var crypro_js = require("crypto-js");
|
||||
|
||||
|
||||
var source_data = "你好,世界!"
|
||||
var aes_key = "1234567890abcdef"
|
||||
var iv = "abcdef1234567890";
|
||||
|
||||
|
||||
var byte_iv = crypro_js.enc.Utf8.parse(iv);
|
||||
var key = crypro_js.enc.Utf8.parse(aes_key);
|
||||
var data = crypro_js.enc.Utf8.parse(source_data);
|
||||
|
||||
function aes_ecb_encrypt() {
|
||||
var encrypted = crypro_js.AES.encrypt(data, key, {
|
||||
mode: crypro_js.mode.ECB, // 工作模式
|
||||
padding: crypro_js.pad.Pkcs7 // 填充模式
|
||||
})
|
||||
return btoa(encrypted.toString()); // base64 返回
|
||||
|
||||
}
|
||||
|
||||
function aes_ecb_decrypt() {
|
||||
var encrypt_data = atob(aes_ecb_encrypt());
|
||||
|
||||
var decrypted = crypro_js.AES.decrypt(encrypt_data, key, {
|
||||
mode: crypro_js.mode.ECB, // 工作模式
|
||||
padding: crypro_js.pad.Pkcs7 // 填充模式
|
||||
})
|
||||
return decrypted.toString(crypro_js.enc.Utf8);
|
||||
}
|
||||
|
||||
|
||||
console.log("密文结果: ", aes_ecb_encrypt())
|
||||
console.log("明文结果: ", aes_ecb_decrypt())
|
||||
|
||||
function aes_cbc_encrypt() {
|
||||
|
||||
var encrypted = crypro_js.AES.encrypt(data, key, {
|
||||
iv: byte_iv,
|
||||
mode: crypro_js.mode.CBC, // 工作模式
|
||||
padding: crypro_js.pad.Pkcs7 // 填充模式
|
||||
})
|
||||
return btoa(encrypted.toString());
|
||||
|
||||
}
|
||||
|
||||
function aes_cbc_decrypt() {
|
||||
var encrypt_data = atob(aes_cbc_encrypt());
|
||||
|
||||
var decrypted = crypro_js.AES.decrypt(encrypt_data, key, {
|
||||
iv: byte_iv,
|
||||
mode: crypro_js.mode.CBC, // 工作模式
|
||||
padding: crypro_js.pad.Pkcs7 // 填充模式
|
||||
})
|
||||
return decrypted.toString(crypro_js.enc.Utf8);
|
||||
}
|
||||
|
||||
|
||||
console.log("CBC 密文结果: ", aes_cbc_encrypt());
|
||||
console.log("CBC 明文结果: ", aes_cbc_decrypt());
|
||||
31
对称加密-AES-2026-08-24/2. python实现aes加解密.py
Normal file
31
对称加密-AES-2026-08-24/2. python实现aes加解密.py
Normal file
@@ -0,0 +1,31 @@
|
||||
import base64
|
||||
from Crypto.Cipher import AES
|
||||
from Crypto.Util.Padding import pad, unpad
|
||||
"""
|
||||
des加解密,key长度有要求
|
||||
key长度必须8字节(64bit)
|
||||
|
||||
aes加解密,key长度有要求
|
||||
key长度必须16字节(128bit), 24字节(192bit), 32字节(256bit)
|
||||
"""
|
||||
|
||||
def aes_encrypt(plain_text):
|
||||
cipher = AES.new(des_key, AES.MODE_CBC, iv)
|
||||
encrypted = cipher.encrypt(pad(plain_text.encode("utf-8"), AES.block_size))
|
||||
return base64.b64encode(encrypted)
|
||||
|
||||
|
||||
def aes_decrypt(cipher_text):
|
||||
cipher = AES.new(des_key, AES.MODE_CBC, iv)
|
||||
decrypt_byte_data = base64.b64decode(cipher_text)
|
||||
decrypted = unpad(cipher.decrypt(decrypt_byte_data), AES.block_size)
|
||||
return decrypted.decode("utf-8")
|
||||
|
||||
|
||||
source_data = "你好,世界!"
|
||||
des_key = "1234567890abcdef".encode("utf-8")
|
||||
iv = "abcdef1234567890".encode("utf-8")
|
||||
if __name__ == "__main__":
|
||||
enc_data = aes_encrypt(source_data)
|
||||
print(enc_data)
|
||||
print(aes_decrypt(aes_encrypt(source_data)))
|
||||
34
对称加密-AES-2026-08-24/实战案例-商业观察/js解密.js
Normal file
34
对称加密-AES-2026-08-24/实战案例-商业观察/js解密.js
Normal file
File diff suppressed because one or more lines are too long
24
对称加密-AES-2026-08-24/实战案例-建筑市场/js解密.js
Normal file
24
对称加密-AES-2026-08-24/实战案例-建筑市场/js解密.js
Normal file
File diff suppressed because one or more lines are too long
37
对称加密-AES-2026-08-24/实战案例-建筑市场/python调用.py
Normal file
37
对称加密-AES-2026-08-24/实战案例-建筑市场/python调用.py
Normal file
@@ -0,0 +1,37 @@
|
||||
import requests
|
||||
import execjs
|
||||
import time
|
||||
|
||||
headers = {
|
||||
"Accept": "application/json, text/plain, */*",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Connection": "keep-alive",
|
||||
"Referer": "https://jzsc.mohurd.gov.cn/data/company",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "same-origin",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36",
|
||||
"accessToken;": "",
|
||||
"sec-ch-ua": "\"Chromium\";v=\"152\", \"Not?A_Brand\";v=\"24\", \"Google Chrome\";v=\"152\"",
|
||||
"sec-ch-ua-mobile": "?0",
|
||||
"sec-ch-ua-platform": "\"Windows\"",
|
||||
"timeout": "30000",
|
||||
"v": "231012"
|
||||
}
|
||||
|
||||
with open("js解密.js", "r", encoding="utf-8") as f:
|
||||
js_code = f.read()
|
||||
|
||||
code = execjs.compile(js_code)
|
||||
url = 'https://jzsc.mohurd.gov.cn/APi/webApi/dataservice/query/comp/list'
|
||||
for page in range(1, 11):
|
||||
params = {
|
||||
"pg": str(page),
|
||||
"pgsz": "15",
|
||||
"total": "450"
|
||||
}
|
||||
response = requests.get(url, headers=headers, params=params)
|
||||
# print(response.text)
|
||||
result = code.call("g", response.text)
|
||||
print(result)
|
||||
time.sleep(1)
|
||||
Reference in New Issue
Block a user