Skip to content

Latest commit

 

History

History
51 lines (38 loc) · 2.49 KB

每日一算法:凯撒密码.md

File metadata and controls

51 lines (38 loc) · 2.49 KB

凯撒密码

凯撒密码(Caesar cipher)是一种最简单且最广为人知的加密技术。凯撒密码是一种替换加密技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。

例如,当偏移量是 3 的时候,所有的字母 A 将被替换成 D,B 变成 E,以此类推。

凯撒密码

JavaScript 实现

使用凯撒密码对给定的字符串进行加密或解密。

  • 使用模(%)运算符和三元运算符(?)计算正确的加密/解密密钥。
  • 使用扩展运算符(...)和 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

LeetCode 关于加密解密的题目

更多资料