自定义加解密
js
// 1. 自定义密钥(任意长度,越长越难撞)
const KEY = Buffer.from('MyQuark2025!@#', 'utf8');
// 2. 加密
function encrypt(str) {
const buf = Buffer.from(str, 'utf8');
const len = buf.length;
const keyLen = KEY.length;
for (let i = 0; i < len; i++) {
buf[i] ^= KEY[i % keyLen]; // 异或
buf[i] = ((buf[i] << 3) & 0xFF) | (buf[i] >> 5); // 循环左移 3 位
}
return buf.toString('hex'); // 返回十六进制字符串
}
// 3. 解密
function decrypt(hex) {
const buf = Buffer.from(hex, 'hex');
const len = buf.length;
const keyLen = KEY.length;
for (let i = 0; i < len; i++) {
buf[i] = ((buf[i] >> 3) & 0xFF) | (buf[i] << 5); // 循环右移 3 位(逆运算)
buf[i] ^= KEY[i % keyLen]; // 再异或一次就还原
}
return buf.toString('utf8');
}
/* 4. 自测 */
const plain = 'https://pan.quark.cn/s/abc123';
const cipher = encrypt(plain);
console.log('cipher:', cipher); // 16进制密文
console.log('decrypt:', decrypt(cipher)); // 原文