Rot13
2018-12-22 本文已影响0人
Re_Vive
Question
今天学到一个简单的密码学,Rot13,就是对前字符13个字符和后13字符对调
比如:
Rot('revive') //erivir
Rot('1 + 1 = two') //1 + 1 = gbj
Answer
一、正则replace
- 1、将前13个和后13个字母大小写对调,列出并对应
- 2、利用replace找出字符串中的字母
- 3、字符在a中的位置找出并一一替换
function rot13(message) {
var a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
var b = "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM"
return message.replace(/[a-z]/gi, c => b[a.indexOf(c)])
}
二、unicode编码
- 1、找出所以字母
- 2、获取字母的unicode的编码,并判断字母在字母表的前半段还是后半段
- 3、如果是前半段则加13,替换成后半段字符,反之亦然,并解码为字母
const rot13 = str =>
str.replace(/[a-z]/gi, letter =>
String.fromCharCode(
letter.charCodeAt(0) + (
letter.toLowerCase() <= 'm' ? 13: -13
)
)
)
第一种方法为常规操作,替换字符,基本都会用replace,一一对应进行替换就好
第二种就是神仙操作,利用unicode的方法,字符的编码是固定且有序的,对字符进行编码计算再解码即可