×

恶搞版本 零宽字符运 莎士比亚 凯撒密码 开发

(恶搞版本)之插入莎士比亚名句的凯撒密码加密器

Aq66 Aq66 发表于2025-11-02 18:28:24 浏览77 评论0

抢沙发发表评论

凯撒密码加密器(扩展语句库)

莎士比亚名句-凯撒密码加密器

加密时可插入莎士比亚语句;解密仅移除零宽哨兵包裹的插入段。凯撒移位仅作用于英文 A-Z/a-z。

提示:部分平台会显示或清理零宽字符,可能影响插入段或解密。另!跨平台传输密文请在解密时输入正确偏移数

如若想看莎士比亚名句的插入情况 请取消勾选:插入语句也做凯撒移位

----------------------------------------------------------------------------------------

所谓“零宽哨兵包裹”,就是用一对不可见的零宽字符序列作为起止标记,把你插入的句子“夹在中间”。这样:

  • 加密时把插入段包裹起来,用户肉眼看不到标记;

  • 解密时用这对标记把插入段整体识别并移除,不影响主文本的反向移位。

核心点如下:

  • 零宽字符是什么

    • U+200B Zero Width Space(零宽空格)

    • U+200D Zero Width Joiner(零宽连字)

    • U+2063 Invisible Separator(不可见分隔符)

    • 它们是 Unicode 中的“格式化字符”,不占宽度、不显示字形,常见的有:

    • 在英文文本里加入这些字符,通常不会改变显示效果,但它们依然是“字符”,可以被代码匹配到。

  • 具体做法

    • 形如:new RegExp(escape(S_START) + "[\s\S]*?" + escape(S_END), "g")

    • 使用 [\s\S] 而不是 .,是为了跨行匹配;用 *? 非贪婪,避免从第一个起始标记吃到最后一个结束标记。

    • S_START = U+200B U+2063 U+200D

    • S_END = U+200D U+2063 U+200B

    • 定义起始和结束哨兵,示例(与你的代码一致):

    • 插入时:在选定位置插入 S_START + 插入句子 + S_END。

    • 解密时:用一个非贪婪的正则,把 S_START 到 S_END 之间的所有内容整体删除:

  • 选择三字符组合的原因

    • 单一零宽字符在某些平台上偶尔会被自动清理或合并。

    • 用三种不同的零宽字符、并且起止顺序相反,能显著降低“自然文本中误命中”的概率,也更不容易被偶然删除后仍残留成对。


  • 具体做法

    • 形如:new RegExp(escape(S_START) + "[\s\S]*?" + escape(S_END), "g")

    • 使用 [\s\S] 而不是 .,是为了跨行匹配;用 *? 非贪婪,避免从第一个起始标记吃到最后一个结束标记。

    • S_START = U+200B U+2063 U+200D

    • S_END = U+200D U+2063 U+200B

    • 定义起始和结束哨兵,示例(与你的代码一致):

    • 插入时:在选定位置插入 S_START + 插入句子 + S_END。

    • 解密时:用一个非贪婪的正则,把 S_START 到 S_END 之间的所有内容整体删除:

  • 为什么不受凯撒移位影响

    • 你的移位函数只处理 A-Z/a-z。哨兵是 Unicode 的格式化字符,不在字母范围内,所以不会被移位破坏。

    • 解密时先移除哨兵包裹的插入段,再按“二次移位的相反顺序”对主文本反移位,互不干扰。

总之,零宽哨兵包裹是一种“隐形标注”的技术:标注插入段的位置与边界,同时不影响用户视觉体验;它不提供安全性(只是混淆),但足以让你的解密过程在不触碰主文本的前提下,准确移除插入的语句。


纯粹恶搞 不喜勿喷

群贤毕至

访客