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相关推荐

  1. rot5/rot13/rot18/rot47

    ROT5.ROT13.ROT18.ROT47 编码是一种简单的码元位置顺序替换暗码.此类编码具有可逆性,可以自我解密,主要用于应对快速浏览,或者是机器的读取,而不让其理解其意. ROT5 是 rota ...

  2. rot13初学者和python的实现

    http://www.shiyanbar.com/ctf/728 rot13初学者和python的实现 57R9S980RNOS49973S757PQO9S80Q36P (md5不解密) 解: 1.密 ...

  3. CTF常规密码学加解密脚本(python)

    常规密码学加解密脚本(python) 文章目录 一.凯撒加解密(python3) 二.base64和base32解密(python2) 三.RC4加解密(python3) 四.差分曼彻斯特解密(pyt ...

  4. 童年经典回忆 | 从零开始带大家用Python撸一个魔塔小游戏呀(2)

    导语 上一期我们带大家完成了魔塔游戏每一层的初始化画面的制作: 童年经典回忆 | 从零开始带大家用Python撸一个魔塔小游戏呀(1) 这一期我们会带大家进一步复现我们的魔塔小游戏,主要内容包括英雄类 ...

  5. 童年经典回忆 | 从零开始带大家用Python撸一个魔塔小游戏呀(3)

    导语 上一期我们主要带大家写了勇士类,以及勇士与一些简单的地图元素接触时所触发的事件: 童年经典回忆 | 从零开始带大家用Python撸一个魔塔小游戏呀(2) 这一期我们会带大家进一步复现我们的魔塔小 ...

  6. 《现代密码学》第一章——经典密码学介绍

    第一章经典密码学介绍 1.1密码学和现代密码学 a.现代密码学与古典密码学的区别: 1.2对称密钥加密的基本设置 a. b.加密的语法 密钥产生算法Gen:一种概率算法 加密算法Enc:输入密钥k,明 ...

  7. python行业中性_【建投金工丁鲁明团队 经典回顾】:零基础python代码策略模型实战...

    原标题:[建投金工丁鲁明团队 经典回顾]:零基础python代码策略模型实战 编者按 本文<零基础python代码策略模型实战>,属于大数据选股领域,报告发布时间为2018年3月8日. 内 ...

  8. python实现经典密码学中列移位算法

    ⭐本专栏主要用python实现密码学中的常用经典算法,例如Vigenere.3DES.RSA.ElGamal.Diffie-Hellman.RSA签名.ElGamal签名.HMAC.哈希算法.列移位. ...

  9. python编程入门经典 评分-豆瓣评分爆炸!Python+机器学习经典图书

    全场自营图书每满 100 减 50 元 .满 200 元减 100 元, 另外当当还特意为[机器学习算法与Python实战]读者提供了一批可与满减叠加使用的"满 200 减 40" ...

最新文章

  1. OKR目标管理法不会用?看最新客户服务团队OKR模板
  2. Daily Scrum9 11.13
  3. 天翼云从业认证(3.1)了解天翼云计算产品
  4. linux 基础学,linux基础学习【1】
  5. 微软Project Springfield团队的F#使用心得
  6. 使用正确的垃圾收集器将Java内存使用量降至最低
  7. 依赖注入例子php,依赖注入小例子
  8. Android教程 -07 Activity的任务栈和启动模式
  9. pc端签名 vue 生成图片_Vue Canvas 实现电子签名 手写板
  10. 第七次作业 numpy统计分布显示
  11. 2022-2027年中国智能化设计行业发展前景及投资战略咨询报告
  12. Java中的观察者模式详解
  13. 十年沉淀,回头发觉我当年面试 “Android,深入分析
  14. 1.5 极限的存在准则和两个重要极限
  15. python编写网络防火墙怎么设置_防火墙怎么设置?网络防火墙设置方法介绍
  16. Python小爬虫之协程爬虫快速上手
  17. 用Java写PTA 7-11 设计一个能处理异常的Loan类
  18. 重装系统:利用微PE制作U盘为启动盘,重装win7旗舰版(win10等也一样)
  19. Web全栈~29.MySQL
  20. 国产FPGA(紫光同创)—— 数据采集及千兆以太网传输(一)

热门文章

  1. tpl怎么口_解决tplogin.cn打开是电信登录页面的办法是什么?
  2. allegro如何导入DXF文件
  3. 人力资源外包有哪些优势和劣性?企业如何适应
  4. Navicat如何导出Excel格式表结构
  5. 盘点76个当下全球免费、优质机器学习数据集获取资源
  6. 计算机网络的便件功能
  7. 图片滤镜——GPUImage
  8. css如何实现圆角边框
  9. 【Linux命令】《鸟哥Linux基础》第十六章 进程管理与SELinux初探
  10. Linux 端口限流(tc + iptables)