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:
70
对称加密-2026-08-21/1. js环境实现des加解密.js
Normal file
70
对称加密-2026-08-21/1. js环境实现des加解密.js
Normal file
@@ -0,0 +1,70 @@
|
||||
var crypro_js = require("crypto-js");
|
||||
|
||||
|
||||
var source_data = "你好,世界!"
|
||||
var des_key = "12345678"
|
||||
var iv = "12345678";
|
||||
|
||||
|
||||
var byte_iv = crypro_js.enc.Utf8.parse(iv);
|
||||
var key = crypro_js.enc.Utf8.parse(des_key);
|
||||
var data = crypro_js.enc.Utf8.parse(source_data);
|
||||
|
||||
function des_ecb_encrypt() {
|
||||
// 进行加密
|
||||
/*
|
||||
* 加密操作
|
||||
* des对称加密,需要三个形参
|
||||
* 1. 明文字节
|
||||
* 2. 密钥字节
|
||||
* 3. 配置对象
|
||||
* (1) mode 工作模式 ECB, CBC, CFB, OFB, CTR
|
||||
* (2) padding 填充模式, Pkcs7,
|
||||
*
|
||||
**/
|
||||
var encrypted = crypro_js.DES.encrypt(data, key, {
|
||||
mode: crypro_js.mode.ECB, // 工作模式
|
||||
padding: crypro_js.pad.Pkcs7 // 填充模式
|
||||
})
|
||||
return encrypted.toString();
|
||||
|
||||
}
|
||||
|
||||
function des_ecb_decrypt() {
|
||||
var encrypt_data = des_ecb_encrypt();
|
||||
|
||||
var decrypted = crypro_js.DES.decrypt(encrypt_data, key, {
|
||||
mode: crypro_js.mode.ECB, // 工作模式
|
||||
padding: crypro_js.pad.Pkcs7 // 填充模式
|
||||
})
|
||||
return decrypted.toString(crypro_js.enc.Utf8);
|
||||
}
|
||||
|
||||
|
||||
// console.log(des_ecb_encrypt())
|
||||
// console.log(des_ecb_decrypt())
|
||||
|
||||
function des_cbc_encrypt() {
|
||||
|
||||
var encrypted = crypro_js.DES.encrypt(data, key, {
|
||||
iv: byte_iv,
|
||||
mode: crypro_js.mode.CBC, // 工作模式
|
||||
padding: crypro_js.pad.Pkcs7 // 填充模式
|
||||
})
|
||||
return encrypted.toString();
|
||||
|
||||
}
|
||||
|
||||
function des_cbc_decrypt() {
|
||||
var encrypt_data = des_cbc_encrypt();
|
||||
|
||||
var decrypted = crypro_js.DES.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(des_cbc_decrypt());
|
||||
25
对称加密-2026-08-21/2. python实现des加解密.py
Normal file
25
对称加密-2026-08-21/2. python实现des加解密.py
Normal file
@@ -0,0 +1,25 @@
|
||||
import base64
|
||||
from Crypto.Cipher import DES
|
||||
from Crypto.Util.Padding import pad, unpad
|
||||
|
||||
|
||||
def des_encrypt(plain_text):
|
||||
cipher = DES.new(des_key, DES.MODE_CBC, iv)
|
||||
encrypted = cipher.encrypt(pad(plain_text.encode("utf-8"), DES.block_size))
|
||||
return base64.b64encode(encrypted)
|
||||
|
||||
|
||||
def des_decrypt(cipher_text):
|
||||
cipher = DES.new(des_key, DES.MODE_CBC, iv)
|
||||
decrypt_byte_data = base64.b64decode(cipher_text)
|
||||
decrypted = unpad(cipher.decrypt(decrypt_byte_data), DES.block_size)
|
||||
return decrypted.decode("utf-8")
|
||||
|
||||
|
||||
source_data = "你好,世界!"
|
||||
des_key = "12345678".encode("utf-8")
|
||||
iv = "12345678".encode("utf-8")
|
||||
if __name__ == "__main__":
|
||||
enc_data = des_encrypt(source_data)
|
||||
print(enc_data)
|
||||
print(des_decrypt(des_encrypt(source_data)))
|
||||
20
对称加密-2026-08-21/实战案例-自然科学/js解密.js
Normal file
20
对称加密-2026-08-21/实战案例-自然科学/js解密.js
Normal file
File diff suppressed because one or more lines are too long
55
对称加密-2026-08-21/实战案例-自然科学/调用解密.py
Normal file
55
对称加密-2026-08-21/实战案例-自然科学/调用解密.py
Normal file
@@ -0,0 +1,55 @@
|
||||
import json
|
||||
import time
|
||||
|
||||
import requests
|
||||
import execjs
|
||||
|
||||
headers = {
|
||||
"Accept": "application/json, text/plain, */*",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Authorization": "Bearer false",
|
||||
"Connection": "keep-alive",
|
||||
"Content-Type": "application/json;charset=UTF-8",
|
||||
"Origin": "https://kd.nsfc.cn",
|
||||
"Referer": "https://kd.nsfc.cn/finalSearchList?s=%E7%AC%AC%E4%B8%80%E6%80%A7%E5%8E%9F%E7%90%86%E8%AE%A1%E7%AE%97",
|
||||
"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",
|
||||
"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\""
|
||||
}
|
||||
with open("js解密.js", "r", encoding="utf-8") as f:
|
||||
js_code = f.read()
|
||||
|
||||
|
||||
ctx = execjs.compile(js_code)
|
||||
|
||||
url = 'https://kd.nsfc.cn/api/baseQuery/completionQueryResultsData'
|
||||
for page in range(1, 11):
|
||||
data = {
|
||||
"complete": True,
|
||||
"fuzzyKeyword": "第一性原理计算",
|
||||
"isFuzzySearch": True,
|
||||
"conclusionYear": "近五年",
|
||||
"dependUnit": "",
|
||||
"keywords": "",
|
||||
"pageNum": page,
|
||||
"pageSize": 10,
|
||||
"projectType": "",
|
||||
"projectTypeName": "",
|
||||
"code": "",
|
||||
"ratifyYear": "",
|
||||
"order": "enddate",
|
||||
"ordering": "desc",
|
||||
"codeScreening": "",
|
||||
"dependUnitScreening": "",
|
||||
"keywordsScreening": "",
|
||||
"projectTypeNameScreening": ""
|
||||
}
|
||||
response = requests.post(url, headers=headers, json=data)
|
||||
result = ctx.call("g", response.text)
|
||||
print(json.loads(result))
|
||||
time.sleep(1)
|
||||
|
||||
Reference in New Issue
Block a user