@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
43 lines (34 loc) • 1.23 kB
text/typescript
import { ClientSecretPayload, SECRET_XOR_KEY } from '@/const/auth';
/**
* 将 Base64 字符串转换为 Uint8Array
*/
const base64ToUint8Array = (base64: string): Uint8Array => {
// Node.js 环境下直接使用 Buffer
return Buffer.from(base64, 'base64');
};
/**
* 对 Uint8Array 进行 XOR 运算 (与客户端的 xorProcess 函数相同)
*/
const xorProcess = (data: Uint8Array, key: Uint8Array): Uint8Array => {
const result = new Uint8Array(data.length);
for (const [i, datum] of data.entries()) {
result[i] = datum ^ key[i % key.length];
}
return result;
};
/**
* 将 Uint8Array 转换为字符串 (UTF-8 解码)
*/
const uint8ArrayToString = (arr: Uint8Array): string => {
return new TextDecoder().decode(arr);
};
export const getXorPayload = (token: string): ClientSecretPayload => {
const keyBytes = new TextEncoder().encode(SECRET_XOR_KEY);
// 1. Base64 解码
const base64DecodedBytes = base64ToUint8Array(token);
// 2. XOR 解混淆
const xorDecryptedBytes = xorProcess(base64DecodedBytes, keyBytes);
// 3. 转换为字符串并解析 JSON
const decodedJsonString = uint8ArrayToString(xorDecryptedBytes);
return JSON.parse(decodedJsonString) as ClientSecretPayload;
};