凱撒密碼
(讓上帝的歸上帝,凱撒的歸凱撒)
下面我們來(lái)介紹風(fēng)靡全球的凱撒密碼Caesar cipher,又叫移位密碼。
移位密碼也就是密碼中的字母會(huì)按照指定的數(shù)量來(lái)做移位。
一個(gè)常見(jiàn)的案例就是ROT13密碼,字母會(huì)移位13個(gè)位置。由'A' ? 'N', 'B' ? 'O',以此類推。
寫(xiě)一個(gè)ROT13函數(shù),實(shí)現(xiàn)輸入加密字符串,輸出解密字符串。
所有的字母都是大寫(xiě),不要轉(zhuǎn)化任何非字母形式的字符(例如:空格,標(biāo)點(diǎn)符號(hào)),遇到這些特殊字符,跳過(guò)它們。
當(dāng)你完成不了挑戰(zhàn)的時(shí)候,記得開(kāi)大招'Read-Search-Ask'。
function rot13(str) { // LBH QVQ VG!
// 請(qǐng)把你的代碼寫(xiě)在這里
return str;
}
rot13("SERR PBQR PNZC"); // 你可以修改這一行來(lái)測(cè)試你的代碼
提示可用的語(yǔ)句:
String.charCodeAt()
String.fromCharCode()
步驟分析:
- 此處需要通過(guò)獲取字符的UTF-18(即ACSII碼),大寫(xiě)字母的UTF-18碼區(qū)間在65-90之間,不在此區(qū)間的可以不進(jìn)行運(yùn)算
- 大于中間值(77)的可以-13并輸出相應(yīng)字符追加到新字符串當(dāng)中
- 小于或等于中間值(77)的可以+13并輸出相應(yīng)字符追加到新字符串中
- 合并字符串并輸出
- 需要注意的點(diǎn):
- .charCodeAt()方法的一般格式是:字符串.chartCodeAr(字符串索引)
- .fromCharCode()方法一般格式是:字符類型.fromCharCode(UTF-18編碼)
function rot13(str) {
var tem=[];
for(var i=0; i<str.length; i++){ //通過(guò)循環(huán)檢索字符串每個(gè)字符
var ix=str.charCodeAt(i);
if (ix<65 || ix>90){ //首先把UTF-18不在65-90區(qū)間的原樣輸出
tem.push(String.fromCharCode(ix));
}else if(ix>77){ //大于UTF-18中間值的-13并輸出相應(yīng)字符
tem.push(String.fromCharCode(ix-13));
}else{ //否則+13并輸出相應(yīng)字符
tem.push(String.fromCharCode(ix+13));
}
}
return tem.join("");
}
rot13("SERR PBQR PNZC");