侧边栏壁纸
  • 累计撰写 24 篇文章
  • 累计创建 8 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

基于凯撒加密原理进行字符串加密

付心武士
2026-09-04 / 0 评论 / 0 点赞 / 1 阅读 / 2247 字

凯撒加密

凯撒密码(Caesar cipher)是一种替换加密技术,其核心思想是将明文中的每个字母按照字母表中的固定偏移量进行替换,从而生成密文。

基础版只支持英文字母,通过循环偏移的方法生成密文,按照相同的原理可以给数字和汉字也应用循环偏移生成密文。


function decode(message: string, shift: number): string {
  let arr = message.split('');
  
  for (let i = 0; i < arr.length; i++) {
    let char = arr[i];
    if (char.match(/[a-z]/i)) {
      let code = char.charCodeAt(0);
      let base = code >= 65 && code <= 90 ? 65 : 97;
      arr[i] = String.fromCharCode(((code - base - shift + 26) % 26) + base);
    }
    if (char.match(/[0-9]/)) {
      arr[i] = ((parseInt(char) - shift + 10) % 10).toString();
    }
    if (char.match(/[\u4e00-\u9fa5]/)) {
      let base = 19968;
      let code = char.charCodeAt(0);
      arr[i] = String.fromCharCode(((code - base - shift + 20901) % 20901) + base);
    }
  }
  return arr.join('');
}

function encode(message:string, shift:number):string {
  let arr = message.split('');
  
  for (let i = 0; i < arr.length; i++) {
    let char = arr[i];
    if (char.match(/[a-z]/i)) {
      let code = char.charCodeAt(0);
      let base = code >= 65 && code <= 90 ? 65 : 97;
      arr[i] = String.fromCharCode(((code - base + shift + 26) % 26) + base);
    }
    if (char.match(/[0-9]/)) {
      arr[i] = ((parseInt(char) + shift + 10) % 10).toString();
    }
    if (char.match(/[\u4e00-\u9fa5]/)) {
      let base = 19968;
      let code = char.charCodeAt(0);
      arr[i] = String.fromCharCode(((code - base + shift + 20901) % 20901) + base);
    }
  }
  
  return arr.join('');
}

let message = "Hello, World! 123 你好";
let shift = 3;

let encodedMessage = encode(message, shift);
console.log("Encoded Message:", encodedMessage); // Encoded Message: Khoor, Zruog! 456 佣妀

let decodedMessage = decode(encodedMessage, shift);
console.log("Decoded Message:", decodedMessage);  // Decoded Message: Hello, World! 123 你好

0

评论区