ROT13密码

来源:互联网 发布:江西在线网安全知让 编辑:程序博客网 时间:2024/06/04 14:48

ROT13密码

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

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

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

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

分析:大写字母"A"的unicode码为65,同理“Z”—— 90,“M”—— 77。

          任何非字母形式的字符,不需要转换,直接存入数组

          后13个大写字母,其unicode码减去13后通过String.fromCharCode()转换后,存入数组中

          前13个大写字母,其unicode码加上13后通过String.fromCharCode()转换后,存入数组中

          最后将数组转换成字符串即可

        String.fromCharCode() 静态方法根据指定的 Unicode 编码中的序号值来返回一个字符串。

        String.charCodeAt() 方法返回0到65535之间的整数,代表索引处字符的UTF-16编码单元(在Unicode编码单元表示一个单一的UTF-16编码单元的情况下,UTF-16编码单元匹配Unicode编码单元。

       function rot13(str) { 
         var newarr = [];
         for(var i = 0; i < str.length; i ++){
           if(str.charCodeAt(i) < 65 || str.charCodeAt(i) > 90){
             newarr.push(str.charAt(i));
             // 非字母形式的字符,直接跳过,存入数组newarr中
           }
          else if(str.charCodeAt(i) > 77){
            newarr.push(String.fromCharCode(str.charCodeAt(i) - 13));
            // 77 —— 第13个大写字母“M”
            // 后13个大写字母,减去13
          }else{
            newarr.push(String.fromCharCode(str.charCodeAt(i) + 13));
            // 前13个大写字母,加上13 
          }
        }
        return newarr.join("");
     }
     rot13("SERR PBQR PNZC");

                                                                                                                                            ——FreeCodeCamp269《Caesars Cipher》


0 0
原创粉丝点击