mirror of
https://github.com/violettoolssite/CFspider.git
synced 2026-04-05 03:09:01 +08:00
55 lines
1.6 KiB
JavaScript
55 lines
1.6 KiB
JavaScript
// x27cn 加密/解密函数
|
|
// 在 workers.js 开头添加这些函数
|
|
|
|
const X27CN_KEY = 'x27cn2026'; // 可以通过环境变量覆盖
|
|
|
|
// x27cn 加密函数
|
|
function x27cnEncrypt(text, key = X27CN_KEY) {
|
|
if (!text) return '';
|
|
const keyBytes = new TextEncoder().encode(key);
|
|
const textBytes = new TextEncoder().encode(text);
|
|
const result = new Uint8Array(textBytes.length);
|
|
|
|
for (let i = 0; i < textBytes.length; i++) {
|
|
// XOR with key byte
|
|
let b = textBytes[i] ^ keyBytes[i % keyBytes.length];
|
|
// Rotate bits
|
|
b = ((b << 3) | (b >> 5)) & 0xFF;
|
|
// Add position offset
|
|
b = (b + i) & 0xFF;
|
|
result[i] = b;
|
|
}
|
|
|
|
// Convert to hex string
|
|
return Array.from(result).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
}
|
|
|
|
// x27cn 解密函数
|
|
function x27cnDecrypt(hex, key = X27CN_KEY) {
|
|
if (!hex || hex.length % 2 !== 0) return '';
|
|
const keyBytes = new TextEncoder().encode(key);
|
|
const bytes = new Uint8Array(hex.length / 2);
|
|
|
|
for (let i = 0; i < bytes.length; i++) {
|
|
bytes[i] = parseInt(hex.substr(i * 2, 2), 16);
|
|
}
|
|
|
|
const result = new Uint8Array(bytes.length);
|
|
|
|
for (let i = 0; i < bytes.length; i++) {
|
|
let b = bytes[i];
|
|
// Reverse: subtract position offset
|
|
b = (b - i + 256) & 0xFF;
|
|
// Reverse: rotate bits back
|
|
b = ((b >> 3) | (b << 5)) & 0xFF;
|
|
// Reverse: XOR with key byte
|
|
b = b ^ keyBytes[i % keyBytes.length];
|
|
result[i] = b;
|
|
}
|
|
|
|
return new TextDecoder().decode(result);
|
|
}
|
|
|
|
module.exports = { x27cnEncrypt, x27cnDecrypt };
|
|
|