ROT5/13/18/47 密码
来源:互联网 发布:知行英语综合教程下载 编辑:程序博客网 时间:2024/06/05 02:17
0x00 简介
ROT13过去用在1980年代早期的net.jokes新闻群组。它被用来隐藏某些可能侮辱到特定读者的笑话、隐晦某个谜题的答案或八卦性的内容。之所以选一次13个字母的位移而不是其他值(例如原本凯撒加密里的3字母位移)乃因13位这个值刚刚好加密解密都是一样,故只要一行命令就可以简洁的满足两者需要。ROT13一般是新闻阅读软体内建支援的功能。Email位址有时也以ROT13编码以躲过较不复杂的垃圾邮件机器人耳目。
0x01 加密方法
套用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应用函式会回复原始文字;在密码学上,这叫做对等加密。
0x02 ROT5/13/18/47 区别
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.
0x03代码
#! python3# -*- coding: utf-8 -*-# @Time : 2017/8/26 下午12:12# @Author : BlingBling# @File : ROT3.py# @Software: PyCharm Community Editionimport stringclass ROT(): def __init__(self, strs): self.strs = strs #两次encode即还原 rot13只加密字母 def rot13_encode(self): start_a = ord('a') start_A = ord('A') encode_str = "" for key in self.strs: if not key.isalpha(): encode_str += key continue if key.islower(): start = start_a if key.isupper(): start = start_A #alpha表,除26求余 encode_letter = (ord(key) - start + 13) % 26 + start encode_str += chr(encode_letter) print("rot13:" + encode_str) return encode_str #rot5只加密数字 def rot5_encode(self): encode_str = "" for key in self.strs: if not key.isdigit(): encode_str += key else: digit = (int(key) + 5) % 10 encode_digit = '%d' %digit encode_str += encode_digit print("rot5:" + encode_str) return encode_str #rot18 = rot13 + rot5 def rot18_encode(self): self.strs = self.rot5_encode() encode_str = self.rot13_encode() print("rot18:" + encode_str) return encode_str #rot47 对数字、字母、常用符号进行编码,按照它们的ASCII值进行位置替换,用当前字符ASCII值往前数的第47位对应字符替换当前字符 def rot47_encode(self): encode_str = "" for key in self.strs: tmp = ord(key) + 47 if tmp > 126: tmp = tmp - 126 + 32 encode_str += chr(tmp) print("rot47:" + encode_str) return encode_strif __name__ == '__main__': str = input("please input string to decode:\n") rot = ROT(str) rot.rot13_encode()
- ROT5/13/18/47 密码
- 18、windows 忘记密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 【密码】
- 密码
- 密码
- 数学建模专栏 | 第六篇:MATLAB优化模型求解方法(下):全局优化
- Bootstrap常用样式类(v3.3.4)
- jQuery获取父级元素、子级元素、兄弟元素的方法
- 线程间协作的两种方式:wait、notify、notifyAll和Condition
- 接水问题
- ROT5/13/18/47 密码
- 类型的Overflow与underflow
- 集合(4)刘备 map
- 排序算法——归并排序
- 使用virtualenv Django 创建应用程序的前期配置
- 浅谈React
- 菜鸟Python(5)
- synchronized 与 Lock 区别联系
- Painting Fence[分治]