凯撒密码(Caesar cipher)是一种最简单且最广为人知的加密技术。凯撒密码是一种替换加密技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
例如,当偏移量是 3 的时候,所有的字母 A 将被替换成 D,B 变成 E,以此类推。
使用凯撒密码对给定的字符串进行加密或解密。
- 使用模(
%
)运算符和三元运算符(?
)计算正确的加密/解密密钥。 - 使用扩展运算符(
...
)和Array.prototype.map()
遍历给定字符串的字母。 - 使用
String.prototype.charCodeAt()
和String.fromCharCode()
适当地转换每个字母,而忽略特殊字符、空格等。 - 使用
Array.prototype.join()
将所有的字母组合成一个字符串。 - 将
true
传递给最后一个参数decrypt
,以解密加密字符串。
const caesarCipher = (str, shift, decrypt = false) => {
const s = decrypt ? (26 - shift) % 26 : shift
const n = s > 0 ? s : 26 + (s % 26)
return [...str]
.map((l, i) => {
const c = str.charCodeAt(i)
if (c >= 65 && c <= 90)
return String.fromCharCode(((c - 65 + n) % 26) + 65)
if (c >= 97 && c <= 122)
return String.fromCharCode(((c - 97 + n) % 26) + 97)
return l
})
.join('')
}
caesarCipher('Hello World!', -3) // 'Ebiil Tloia!'
caesarCipher('Ebiil Tloia!', 23, true) // 'Hello World!'
此示例来自 30 seconds of code 的 euclideanDistance