Rot13

作者: Re_Vive | 来源:发表于2018-12-22 01:27 被阅读0次

    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的方法,字符的编码是固定且有序的,对字符进行编码计算再解码即可

    相关文章

      网友评论

          本文标题:Rot13

          本文链接:https://www.haomeiwen.com/subject/acbbkqtx.html