凯撒加密
凯撒密码(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 你好
评论区