rot13加密解密原理

 ROT13(回转13位,rotate by 13 places,有时中间加了个连字符称作ROT-13)是一种简易的替换式密码。它是一种在英文网络论坛用作隐藏八卦(spoiler)、妙句、谜题解答以及某些脏话的工具,目的是逃过版主或管理员的匆匆一瞥。ROT13被描述成“杂志字谜上下颠倒解答的Usenet点对点体”。ROT13 也是过去在古罗马开发的凯撒加密的一种变体。

密码描述

编辑

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

对任何字元x:ROT13(ROT13(x))=ROT26(x)=x

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

转换可以利用查找表完成,如下例所示

a

b c d e f g h i g k l m n o p q r s t u v w x y z
n o p q r s t u v w x y z a b c d e f g h i g k l m

 python实现rot13加密解密源码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/10/29 18:08
# @File    : rot13.py
import string
result=[]
upperCase=string.ascii_uppercase
lowerCase=string.ascii_lowercase
upperDict={}
lowerDict={}
print("欢迎来到rot13加密解密界面")
inputStr=input("请输入你要加密或解密的字符串")
while True:
    print("请确认%s是否为你想要输入的字符串,如果正确请输入y,否则输入n"%(inputStr))
    flag=input("请输入你的确认结果")
    if (flag=='y') or (flag=='Y'):
	    break
    if (flag=='n') or (flag=='N'):
	    inputStr=input("请重新输入你要加密或解密的字符串")
    else:
	    print("确认方式不合理")
	    break
for i in range(0,len(upperCase)):
    if i<13:
        upperDict[upperCase[i]]=upperCase[i+13]
    else:
        upperDict[upperCase[i]]=upperCase[i-13]
for i in range(0,len(lowerCase)):
    if i<13:
        lowerDict[lowerCase[i]]=lowerCase[i+13]
    else:
        lowerDict[lowerCase[i]]=lowerCase[i-13]
for ch in inputStr:
    if ch in lowerDict:
        result.append(lowerDict[ch])
    elif ch in upperDict:
        result.append(upperDict[ch])
    else:
        result.append(ch)
result=''.join(result)
print("最终加密结果为%s"%(result))

 

你可能感兴趣的:(编码与加解密学习)