【经典密码学】Rot5/Rot13/Rot18/Rot47----python
ROT-13 加密,英文字母表的13位移位
两次加密结果相同,即密文用相同方法二次加密可得明文,类凯撒加密。
以下是初次尝试用代码编写,后来在找有没有能自己生成lookup-tuple的方法,手动写真的有点蠢。
# ROT13 解密
# ABCD EFGH IJKL MNOP QRSTUVWXYZabcdefghijklmnopqrstuvwxyz
# NOPQ RSTU VWXY ZABC DEFGHIJKLMnopqrstuvwxyzabcdefghijklm
lookup_tuple = {'A':'N','B':'O','C':'P','D':'Q','E':'R','F':'S','G':'T','H':'U','I':'V','J':'W','K':'X','L':'Y','M':'Z','N':'A','O':'B',
'P':'C','Q':'D','R':'E','S':'F','T':'G','U':'H','V':'I','W':'J','X':'K',
'Y':'L','Z':'M','a':'n','b':'o','c':'p','d':'q','e':'r','f':'s','g':'t',
'h':'u','i':'v','j':'w','k':'x','l':'y','m':'z','n':'a','o':'b','p':'c',
'q':'d','r':'e','s':'f','t':'g','u':'h','v':'i','w':'j','x':'k','y':'l','z':'m'}a = "Zl anzr vf n-wva , V yvxr fghql!"
c = ""
for i in a:if i not in lookup_tuple:b = ielse:b = lookup_tuple[i]c = c + b
print(c)
之后了解到string模块,查看源码可知:
"""A collection of string constants.Public module variables:whitespace -- a string containing all ASCII whitespace
ascii_lowercase -- a string containing all ASCII lowercase letters
ascii_uppercase -- a string containing all ASCII uppercase letters
ascii_letters -- a string containing all ASCII letters
digits -- a string containing all ASCII decimal digits
hexdigits -- a string containing all ASCII hexadecimal digits
octdigits -- a string containing all ASCII octal digits
punctuation -- a string containing all ASCII punctuation characters
printable -- a string containing all ASCII characters considered printable"""__all__ = ["ascii_letters", "ascii_lowercase", "ascii_uppercase", "capwords","digits", "hexdigits", "octdigits", "printable", "punctuation","whitespace", "Formatter", "Template"]import _string# Some strings for ctype-style character classification
whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace
于是使用里面定义的ascii_lowercase和ascii_uppercase。
修改后代码:
import string# 引入string的定义字符串
ascii_lowercase = string.ascii_lowercase # 小写字符串
ascii_uppercase = string.ascii_uppercase # 大写字符串
lookup_tuple = {} # 存放字典# 大写字符串填充
for i in range(len(ascii_uppercase)):lookup_tuple[ascii_uppercase[i]] = ascii_uppercase[i-13]
print(lookup_tuple)
# 小写字符串填充
for i in range(len(ascii_lowercase)):lookup_tuple[ascii_lowercase[i]] = ascii_lowercase[i-13]
print(lookup_tuple)# 输入
in_string = "Zl anzr vf n-wva , V yvxr fghql!"
c = ""
# 转换字母
for i in in_string:if i not in lookup_tuple:b = ielse:b = lookup_tuple[i]c = c + b
# 输出
print(c)
尝试其余rot 算法
ROT5:只对数字进行编码,将数字往前数的第5个数字替换当前数字,例如当前为0,编码后变成5,当前为1,编码后变成6。
ROT13:只对字母进行编码,将字母往前数的第13个字母替换当前字母,例如当前为A,编码后变成N,当前为B,编码后变成O。
ROT18:将ROT5和ROT13组合在一起,命名为ROT18。
ROT47:对数字、字母、常用符号进行编码,按ASCII值进行位置替换,将字符ASCII值往前数的第47位对应字符替换当前字符,例如当前为小写字母z,编码后变成大写字母K,当前为数字0,编码后变成符号_。用于ROT47编码的字符其ASCII值范围是33-126,具体参考ASCII编码。
----ps:懒得写成函数的作者
# ROT5、13、18 解密import string# 引入string的定义字符串
ascii_lowercase = string.ascii_lowercase # 小写字符串
ascii_uppercase = string.ascii_uppercase # 大写字符串
digits = string.digits# rot-18
# ROT18:这是一个异类,本来没有,它是将ROT5和ROT13组合在一起,为了好称呼,将其命名为ROT18。# rot-5
# ROT5:只对数字进行编码,用当前数字往前数的第5个数字替换当前数字,例如当前为0,编码后变成5,当前为1,编码后变成6,以此类推顺序循环。
digits_dict = {}
for i in range(len(digits)):digits_dict[digits[i]] = digits[i-5]# rot-13
# ROT13:只对字母进行编码,用当前字母往前数的第13个字母替换当前字母,例如当前为A,编码后变成N,当前为B,编码后变成O,以此类推顺序循环。
lookup_dict = {}
# 大写字符串填充
for i in range(len(ascii_uppercase)):lookup_dict[ascii_uppercase[i]] = ascii_uppercase[i-13]
# 小写字符串填充
for i in range(len(ascii_lowercase)):lookup_dict[ascii_lowercase[i]] = ascii_lowercase[i-13]# 判断输入是否为数字、字母 后转换
# 这里有一个很有意思的发现:中文被if判断为alpha
cipher = input("what's your cipher str:")
clear = ''
for i in cipher:if i.isdigit():a_digit = digits_dict[i]elif i.isalpha():a_digit = lookup_dict[i]else:a_digit = iclear += a_digitprint(clear)
# rot-47 解密
s = "nihao"
x = []
for i in range(len(s)):j = ord(s[i]) # 字符在ASCII中的序号if j >= 33 and j <= 126: # 用于ROT47编码的字符其ASCII值范围是33-126x.append(chr(33 + ((j + 14) % 94)))else:x.append(s[i])a = "".join(x)
print(a)
【经典密码学】Rot5/Rot13/Rot18/Rot47----python相关推荐
- rot5/rot13/rot18/rot47
ROT5.ROT13.ROT18.ROT47 编码是一种简单的码元位置顺序替换暗码.此类编码具有可逆性,可以自我解密,主要用于应对快速浏览,或者是机器的读取,而不让其理解其意. ROT5 是 rota ...
- rot13初学者和python的实现
http://www.shiyanbar.com/ctf/728 rot13初学者和python的实现 57R9S980RNOS49973S757PQO9S80Q36P (md5不解密) 解: 1.密 ...
- CTF常规密码学加解密脚本(python)
常规密码学加解密脚本(python) 文章目录 一.凯撒加解密(python3) 二.base64和base32解密(python2) 三.RC4加解密(python3) 四.差分曼彻斯特解密(pyt ...
- 童年经典回忆 | 从零开始带大家用Python撸一个魔塔小游戏呀(2)
导语 上一期我们带大家完成了魔塔游戏每一层的初始化画面的制作: 童年经典回忆 | 从零开始带大家用Python撸一个魔塔小游戏呀(1) 这一期我们会带大家进一步复现我们的魔塔小游戏,主要内容包括英雄类 ...
- 童年经典回忆 | 从零开始带大家用Python撸一个魔塔小游戏呀(3)
导语 上一期我们主要带大家写了勇士类,以及勇士与一些简单的地图元素接触时所触发的事件: 童年经典回忆 | 从零开始带大家用Python撸一个魔塔小游戏呀(2) 这一期我们会带大家进一步复现我们的魔塔小 ...
- 《现代密码学》第一章——经典密码学介绍
第一章经典密码学介绍 1.1密码学和现代密码学 a.现代密码学与古典密码学的区别: 1.2对称密钥加密的基本设置 a. b.加密的语法 密钥产生算法Gen:一种概率算法 加密算法Enc:输入密钥k,明 ...
- python行业中性_【建投金工丁鲁明团队 经典回顾】:零基础python代码策略模型实战...
原标题:[建投金工丁鲁明团队 经典回顾]:零基础python代码策略模型实战 编者按 本文<零基础python代码策略模型实战>,属于大数据选股领域,报告发布时间为2018年3月8日. 内 ...
- python实现经典密码学中列移位算法
⭐本专栏主要用python实现密码学中的常用经典算法,例如Vigenere.3DES.RSA.ElGamal.Diffie-Hellman.RSA签名.ElGamal签名.HMAC.哈希算法.列移位. ...
- python编程入门经典 评分-豆瓣评分爆炸!Python+机器学习经典图书
全场自营图书每满 100 减 50 元 .满 200 元减 100 元, 另外当当还特意为[机器学习算法与Python实战]读者提供了一批可与满减叠加使用的"满 200 减 40" ...
最新文章
- OKR目标管理法不会用?看最新客户服务团队OKR模板
- Daily Scrum9 11.13
- 天翼云从业认证(3.1)了解天翼云计算产品
- linux 基础学,linux基础学习【1】
- 微软Project Springfield团队的F#使用心得
- 使用正确的垃圾收集器将Java内存使用量降至最低
- 依赖注入例子php,依赖注入小例子
- Android教程 -07 Activity的任务栈和启动模式
- pc端签名 vue 生成图片_Vue Canvas 实现电子签名 手写板
- 第七次作业 numpy统计分布显示
- 2022-2027年中国智能化设计行业发展前景及投资战略咨询报告
- Java中的观察者模式详解
- 十年沉淀,回头发觉我当年面试 “Android,深入分析
- 1.5 极限的存在准则和两个重要极限
- python编写网络防火墙怎么设置_防火墙怎么设置?网络防火墙设置方法介绍
- Python小爬虫之协程爬虫快速上手
- 用Java写PTA 7-11 设计一个能处理异常的Loan类
- 重装系统:利用微PE制作U盘为启动盘,重装win7旗舰版(win10等也一样)
- Web全栈~29.MySQL
- 国产FPGA(紫光同创)—— 数据采集及千兆以太网传输(一)