You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现一行代码的双向Caesar cipher加解密函数?

一行实现支持正负Key的凯撒密码函数

要实现一行代码的双向凯撒密码,不用搞反转字母表那套,直接通过修正模运算的负数偏移就能搞定:

// 支持大小写的一行实现
const cypher = (input, key) => input.split('').map(c => 
  /[a-zA-Z]/.test(c) ? 
    (c === c.toLowerCase() ? 'abcdefghijklmnopqrstuvwxyz' : 'ABCDEFGHIJKLMNOPQRSTUVWXYZ').charAt((('abcdefghijklmnopqrstuvwxyz'.indexOf(c.toLowerCase()) + key + 26) % 26)) 
    : c
).join('');

核心思路

  • 取消分支判断:用(偏移值 + key + 26) % 26处理负数key——比如key=-2,相当于正向偏移24,这样不管key正负,都能得到合法的字母索引,不需要反转字母表。
  • 兼容大小写:原代码没处理大写字母,这里补充了判断,保证加密后大小写和原字符一致。
  • 极简写法:用charAt替代split后取索引,能稍微简化代码(也可以继续用split,效果一致)。

仅小写版本(更短)

如果只需要处理小写字母,代码可以进一步精简:

const cypher = (input, key) => input.split('').map(c => 
  /[a-z]/.test(c) ? 'abcdefghijklmnopqrstuvwxyz'.charAt((('abcdefghijklmnopqrstuvwxyz'.indexOf(c) + key + 26) % 26)) : c
).join('');

原代码的问题所在

你之前的双向函数用if分支切换字母表和key符号,其实是多此一举——凯撒密码的解密本质就是用负key执行加密操作,直接通过模运算修正负数偏移,就能去掉分支逻辑,实现优雅的一行代码。

内容的提问来源于stack exchange,提问作者Michal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:05:20