Skip to content
自定义加解密
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)); // 原文