恺撒密码是古罗马时代经常使用的一种经典加密算法,伴随着恺撒的南征北战而流传于世。恺撒密码的基本原理是将明文字符串中的每一位字母往后(或往前)移N位,N即是对明文进行加密的密钥;移位之后的结果是一串无明显语义信息的字符串,即密文;解密过程是将密文中的每一位字母往前(或往后)移N位。
最简单的明文是一串英文字母,不区分大小写、无空格和其它标点符号。加密这种明文的第一步是将字母与数字一一对应,例如a对应数字0、b对应数字1、…、z对应数字25;然后,将明文中每一位字母所对应的数字增加(或减少)N后取模,例如,假设 N = 3,对明文中字母b的加密结果是:1 + 3 mod 26 = 4,对字母z的加密结果是:25 + 3 mod 26 = 2。
具体代码如下:
// 加密 function jiami(str, num) { var newStr = ""; for (let i = 0; i < str.length; i++) { if (str.charCodeAt(i) >= 65 && str.charCodeAt(i) <= 90) { newStr += String.fromCharCode((str.charCodeAt(i) - 65 + num + 26) % 26 + 65) } else if (str.charCodeAt(i) >= 97 && str.charCodeAt(i) <= 122) { newStr += String.fromCharCode((str.charCodeAt(i) - 97 + num + 26) % 26 + 97) } //特殊符号不做处理 else newStr += String.fromCharCode(str.charCodeAt(i)); } // console.log(newStr); return newStr; } var result1 = jiami("Peace and Love", 3); console.log(result1); // 输入加密后的密文:Shdfh dqg Oryh // 解密 function jiemi(str, num) { var newStr = ""; for (let i = 0; i < str.length; i++) { // str.chatCodeAt(i); if (str.charCodeAt(i) >= 65 && str.charCodeAt(i) <= 90) { newStr += String.fromCharCode((str.charCodeAt(i) - 65 - num + 26) % 26 + 65) } else if (str.charCodeAt(i) >= 97 && str.charCodeAt(i) <= 122) { newStr += String.fromCharCode((str.charCodeAt(i) - 97 - num + 26) % 26 + 97) } //特殊符号不做处理 else newStr += String.fromCharCode(str.charCodeAt(i)); } // console.log(newStr); return newStr; } var result2 = jiemi(jiami("Peace and Love", 3), 3); console.log(result2); // 输出解密后的明文:Peace and Love
本文为CSDN博主「Pulseum」的原创文章,原文链接:https://blog.csdn.net/qq_53472371/article/details/123812993