功能说明
凯撒密码通过固定位移替换字母,ROT13 是位移 13 的特例,常用于简单文本混淆而非安全加密。该实现只处理 ASCII 字母,保留大小写和其他字符,并支持任意正负位移。位移会先归一化,避免负数取模产生意外结果。
关键代码
先把 offset 归一化到 0 到 25。replace 回调判断字符属于大写还是小写,选择对应基准码,再用字符码减基准、加位移、取模 26 后还原。rot13 直接复用同一逻辑,传入固定位移 13。
const base = char <= "Z" ? 65 : 97;
return String.fromCharCode(((char.charCodeAt(0) - base + normalized) % 26) + base);
使用注意
该算法不提供任何机密性,不能用于密码或令牌保护。非英文字母、数字和标点保持不变。位移为 13 时编码与解码相同,其他位移解码需传入相反数。输入必须为字符串,offset 必须为整数,否则抛 TypeError。
验证方式
断言 caesarCipher(“Abc”, 1) 返回 Bcd,caesarCipher(“Bcd”, -1) 返回 Abc。rot13(“Hello”) 返回 Uryyb,再次 rot13 应还原 Hello。非字母 “123!” 保持不变。offset 为 26 时结果与原文一致,offset 为 1.5 时抛 TypeError。