Skip to content

msbt.seku.su网站文本加解密的实现原理

1. 核心思路

  1. 把 UTF-8 字节流拆成 高 4 位低 4 位(每个字节 = 16 进制的高 + 低)。
  2. 给 0–15 这 16 个数字各分配一个「语气词」:
    0 齁  1 哦  2 噢  3 喔  4 咕  5 咿  6 嗯  7 啊
    8 ~  9 哈  10 ! 11 唔  12 哼  13 ❤  14 呃  15 呼
  3. 编码:高 4 位 → 取第 1 个词,低 4 位 → 取第 2 个词,拼起来。
    解码:逆过程,先查词得数字,再 (high << 4) | low 还原字节,最后 utf8.decode

2. 完整源码(基于dart)

dart
import 'dart:convert';
import 'dart:io';

const List<String> _codebook = [
  "齁", "哦", "噢", "喔", "咕", "咿", "嗯", "啊",
  "~", "哈", "!", "唔", "哼", "❤", "呃", "呼",
];

/// 词 → 数字 的反向索引
late final Map<String, int> _map = Map.fromEntries(
  _codebook.indexed.map((e) => MapEntry(e.$2, e.$1)),
);

/// 编码:任意字符串 → 齁哦噢…
String encode(String input) {
  final bytes = utf8.encode(input);
  final buf = StringBuffer();
  for (final b in bytes) {
    buf.write(_codebook[(b >> 4) & 0x0F]);
    buf.write(_codebook[b & 0x0F]);
  }
  return buf.toString();
}

/// 解码:齁哦噢… → 原字符串
String decode(String input) {
  if (input.length.isOdd) throw FormatException('长度必须为偶数');
  final runes = input.runes.toList();
  final bytes = <int>[];
  for (int i = 0; i < runes.length; i += 2) {
    final high = _map[String.fromCharCode(runes[i])];
    final low  = _map[String.fromCharCode(runes[i + 1])];
    if (high == null || low == null) {
      throw FormatException('包含非法字符');
    }
    bytes.add((high << 4) | low);
  }
  try {
    return utf8.decode(bytes);
  } catch (_) {
    // 如果 UTF-8 非法,退化为 16 进制字符串
    return bytes.map((b) => b.toRadixString(16).padLeft(2, '0')).join();
  }
}

void main(List<String> args) {
  if (args.length != 2) {
    print('用法: dart run main.dart <en|de> "文本"');
    return;
  }
  final mode = args[0];
  final text = args[1];
  try {
    print(mode == 'en' ? encode(text) : decode(text));
  } catch (e) {
    print('错误: $e');
  }
}

Last updated:

最近更新

Released under the MIT License.