特别声明:如果您喜欢小站的内容,可以点击申请会员进行全站阅读。如果您对付费阅读有任何建议或想法,欢迎发送邮件至: airenliao@gmail.com!或添加QQ:874472854(^_^)
这篇文章将要练习的是回转13位密码(ROT13)。维基百科是这样描述ROT13的:
套用ROT13到一段文字上仅仅只需要检查字符字母顺序并替换它在13位之后的对应字母,有需要超过时则重新绕回26英文字母开头即可。 A换成N、B换成O、依此类推到M换成Z,然后序列反转:N换成A、O换成B、最后Z换成M。只有这些出现在英文字母里头的字符受影响;数字、符号、空白字符以及所有其他字符都不变。因为只有在英文字母表里头只有26个,并且26 = 2 × 13
,ROT13函数是它自己的逆反。如下图所示:
比如将DOG向后移13位:
D -> E,F,G,H,I,J,K,L,M,N,O,P,Q
O -> P,Q,R,S,T,U,V,W,X,Y,Z,A,B
G -> H,I,J,K,L,M,N,O,P,Q,R,S,T
即DOG转换为QBT。对照上面的图,也可以查出对应的转换值。
ASCII字符
在JavaScript中可以通过String.prototype.charCodeAt()
方法返回0至65535这间的整数,代表索引处理字符的UTF-16编码单元。可以通过这个方法查出每个字符对应的ASCII编码:
'a'.charCodeAt(); //97
'A'.charCodeAt(); //65
'abc'.charCodeAt(0); //97
'ABC'.charCodeAt(0); //65
传给String.prototype.charCodeAt()
的值如果是:
- 一个大于等于
0
,小于字符串长度的整数,如果不是一个数值,则默认为0
- 如果值小于
0
或大于字符串的长度,则返回NaN
那么,对应的ROT13中的字符对应的编码如下:
-----------------------------------------------------------------
| 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 |
-----------------------------------------------------------------
| A | B | C | D | E | F | G | H | I | J | K | L | M |
-----------------------------------------------------------------
| N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
-----------------------------------------------------------------
| 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 |
-----------------------------------------------------------------
如此一来,A-Z对应的就是65-90。而ROT13是将大写字符串将向后移13位,然后转换成对应的字符。那么:
- 小于65和大于90对应的就是小写字符a-z
- 大于等于65和小于等于77对应的就是大写字符A-M
- 大于等于78和小于等于90对应的就是大写字符N-Z
在实现ROT13功能,
如需转载,烦请注明出处:https://www.w3cplus.com/javascript/bonfire-caesars-cipher-solution.html
如果文章中有不对之处,烦请各位大神拍正。如果你觉得这篇文章对你有所帮助,打个赏,让我有更大的动力去创作。(^_^)。看完了?还不过瘾?点击向作者提问!