rot13 算法

密码描述

套用 ROT13 到一段文字上仅仅只需要检查字元字母顺序并取代它在 13 位之后的对应字母,有需要超过时则重新绕回 26 英文字母开头即可。A 换成 N、B 换成 O、依此类推到 M 换成 Z,然后序列反转:N 换成 A、O 换成 B、最后 Z 换成 M。只有这些出现在英文字母里头的字元受影响;数字、符号、空白字元以及所有其他字元都不变。因为只有在英文字母表里头只有 26 个,并且 26=2×13,ROT13 函数是它自己的逆反:

对任何字元 x:ROT13(ROT13(x))=ROT26(x)=x。
换句话说,两个连续的 ROT13 应用函式会回复原始文字(在数学上,这有时称之为对合(involution);在密码学上,这叫做对等加密(reciprocalcipher))。

python 实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def rot13(i):
cipher = ''
if i.isupper():
if 90 >= ord(i) + 13:
cipher += chr((ord(i) + 13 - 65) % 26 + 65)
else:
cipher += chr((ord(i) - 13 - 65) % 26 + 65)
elif i.islower():
if 122 >= ord(i) + 13:
cipher += chr((ord(i) + 13 - 97) % 26 + 97)
else:
cipher += chr((ord(i) - 13 - 97) % 26 + 97)
else:
cipher += i
return cipher