freeCodeCamp - Caesars Cipher - 凯撒密码

凯撒密码

(让上帝的归上帝,凯撒的归凯撒)

下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码。

移位密码也就是密码中的字母会按照指定的数量来做移位。

一个常见的案例就是ROT13密码,字母会移位13个位置。由’A’ ↔ ‘N’, ‘B’ ↔ ‘O’,以此类推。

写一个ROT13函数,实现输入加密字符串,输出解密字符串。

所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。

当你完成不了挑战的时候,记得开大招’Read-Search-Ask’。

这是一些对你有帮助的资源:

String.charCodeAt()
String.fromCharCode()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function rot13(str) { // LBH QVQ VG!

var len = str.length, // 需要转换的密码长度
arr = [], // 转换之后的结果数组
from = 65, // A的ascii值,开始
move = 13, // 字母移动的位置
end = 90, // Z的ascii值,结束
mid = end - move; // 直接+13可以转换的最大的ascii值

//对每一个字母进行遍历
for (var i = 0; i < len; i++) {

//转为ascii值
var code = str.charCodeAt(i);

//增加移动值之后最大只会到Z[90]
if (code >= from && code <= mid) {
code += move;
}
//增加移动值之后最大超出Z值,又从A[65]开始增加
else if (code > mid && code <= end) {
code = from + (move - (end - code) - 1);
}
arr.push(code);
}

//String.fromCharCode()方法用于将ascii值转为对应的字符

//console.log(String.fromCharCode(72,82,73,73,32,75,79,74,73,32,75,77,65,80));

// es5写法,将数组应用到方法中作为参数使用
return String.fromCharCode.apply(null, arr);

//es6写法
//return String.fromCharCode(...arr);
}

rot13("SERR PBQR PNZC"); // 你可以修改这一行来测试你的代码