原網頁網址 (base64)
在線解碼
aHR0cHM6Ly9jbGF1ZGUzLmZyZWUyZ3B0Lnh5ei8=
逆向效果圖
調用代碼(復制即用)
把倒數第三行換成下面的base64解碼
aHR0cHM6Ly9jbGF1ZGUzLmZyZWUyZ3B0Lnh5ei9hcGkvZ2VuZXJhdGU=
import hashlib
import time
import requests
def generate_signature(timestamp, message):# 假設PUBLIC_SECRET_KEY未定義,我們使用空字符串public_secret_key = ""# 構造簽名字符串signature_string = f"{timestamp}:{message}:{public_secret_key}"# 計算哈希值并返回十六進制字符串return digest_message(signature_string)
def digest_message(message):# 使用hashlib計算SHA-256哈希值hash_object = hashlib.sha256(message.encode('utf-8'))# 獲取十六進制形式的哈希值hash_hex = hash_object.hexdigest()return hash_hexwhile True:message=input('輸入')timestamp = str(int(time.time() * 1000)) # 將時間戳轉換為毫秒signature = generate_signature(timestamp, message)data={"messages": [{"role": "user","content": message}],"time": timestamp,"sign": signature}url='https:/*****/api/generate' #base64解碼就知道gu = requests.post(url,json=data).textprint(gu)
一個時間戳,一個簽名sign,主要是sign加密
sign
扒一下JS,一共有三段
generateSignature
函數:
const generateSignature = async r=>{const {t: e, m: t} = r, n = {}.PUBLIC_SECRET_KEY || "", a = `${e}:${t}:${n}`;return await digestMessage(a)
}
這是一個異步函數,接收一個參數?r,參數?r?包含?t?和?m?兩個屬性。就是r的t和m賦值給e和t。
它使用?PUBLIC_SECRET_KEY?常量(如果已定義)或空字符串作為簽名的一部分。
使用?e(可能是時間戳或某種類型)和?t(消息內容)以及?PUBLIC_SECRET_KEY?來構造一個字符串?a。
然后調用?digestMessage?函數來生成簽名。
digestMessage
函數:
async function digestMessage(r) {if (typeof crypto < "u" && crypto?.subtle?.digest) {const e = new TextEncoder().encode(r), t = await crypto.subtle.digest("SHA-256", e);return Array.from(new Uint8Array(t)).map(a=>a.toString(16).padStart(2, "0")).join("")} elsereturn sha256Exports.sha256(r).toString()
}
這也是一個異步函數,接收一個參數?r。
首先檢查?crypto?對象和?subtle?屬性以及?digest?方法是否存在。這是Web Cryptography API的一部分,用于執行加密操作。
如果Web Cryptography API可用,它會使用?SHA-256?算法對傳入的字符串?r?進行哈希處理。
使用?TextEncoder?將字符串編碼為UTF-8,然后使用?crypto.subtle.digest?進行哈希計算。
將哈希結果轉換為十六進制字符串,每個字節用兩個十六進制數字表示,不足的前面補零。
如果Web Cryptography API不可用,它會使用?sha256Exports.sha256?函數來生成哈希值。
說白了就是計算輸入字符串的 SHA-256 哈希值,然后轉16進制輸出
生成sign
定義了兩個變量 $ 和 V。
$ 是當前時間戳,使用 Date.now() 獲取。
V 是一個異步操作,使用 fetch API 發送一個POST請求到 /api/generate。
請求體是一個JSON字符串,包含 messages、time、pass 和 sign 屬性。
messages 可能是一個消息數組,time 是當前時間戳,pass 可能是一個密碼或令牌。
sign 是通過調用 generateSignature 函數生成的簽名,簽名的生成依賴于當前時間戳和 messages 數組的最后一個元素的內容(如果存在)。
用python代碼實現生成sign
import hashlib
import time
def generate_signature(timestamp, message):# 假設PUBLIC_SECRET_KEY未定義,我們使用空字符串public_secret_key = ""# 構造簽名字符串signature_string = f"{timestamp}:{message}:{public_secret_key}"# 計算哈希值并返回十六進制字符串return digest_message(signature_string)
def digest_message(message):# 使用hashlib計算SHA-256哈希值hash_object = hashlib.sha256(message.encode('utf-8'))# 獲取十六進制形式的哈希值hash_hex = hash_object.hexdigest()return hash_hex
timestamp = str(int(time.time() * 1000)) # 將時間戳轉換為毫秒
message = "Hello World!"
signature = generate_signature(timestamp, message)
print(signature)