Python this模块的加密原理

Python中 this模块的代码(this模块位于Python安装目录/lib下):

s = """Gur Mra bs Clguba, ol Gvz Crgref

Ornhgvshy vf orggre guna htyl.
Rkcyvpvg vf orggre guna vzcyvpvg.
Fvzcyr vf orggre guna pbzcyrk.
Pbzcyrk vf orggre guna pbzcyvpngrq.
Syng vf orggre guna arfgrq.
Fcnefr vf orggre guna qrafr.
Ernqnovyvgl pbhagf.
Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.
Nygubhtu cenpgvpnyvgl orngf chevgl.
Reebef fubhyq arire cnff fvyragyl.
Hayrff rkcyvpvgyl fvyraprq.
Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.
Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.
Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.
Abj vf orggre guna arire.
Nygubhtu arire vf bsgra orggre guna *evtug* abj.
Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.
Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.
Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!"""

d = {}
for c in (65, 97):
    for i in range(26):
        d[chr(i+c)] = chr((i+13) % 26 + c)

print("".join([d.get(c, c) for c in s]))

从源码中看出,作者定义了2个变量,字符串s和字典d;

s很明显是一段密文,d则是密码字典;

可以把密码字典的键理解为加密后的字符,而键对应的值则为原始明文。

密码字典的生成方法也很简单;

看生成算法,有两个for块;首先是字典的键(key),其值范围是 (65+0)~ (65+25)和(97+0)~(97+25)的ASCII编码。也就是英文字母的大小写。

其次是密码字典中键(key)对应的值(value),其值的是 (i+13)%26 + c 的ASCII编码。

我得到的密码字典:

{'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'}

接下来只需要遍历密文,从密码字典获取对应的值即可获得原始明文。

注意最后一行代码中的 d.get(c,c),它定义了默认值,当密码字典中没有对应值时返回默认值,因为密文字符串中有特殊符号是密码字典中没有的。

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/508.html

分类: 计算机技术
推荐阅读:
MIPS指令的类型和格式 MIPS指令集包含三种基本类型的指令:R指令、I指令和J指令。不同类型的指令采用不同的指令格式。
1400多万个弱口令密码字典下载 该密码字典包含1400多万个密码,包含弱密码、常用密码、短密码等组合,适合暴力猜解使用;该文件来源于Kali系统下的密码字典文件;
Python bool()函数 在 Python 中,bool() 是一个内置函数,用于将一个值转换为 bool 类型。bool() 函数返回两个值之一:True 或 False。
Python abs()函数详细教程 abs()函数返回一个数的绝对值;该函数的参数可以是一个整数、浮点数、复数或定义了__abs__()方法的类;
Python实现与智能机器人交互 本文将利用API与智能机器人进行人机交互,进行简单的聊天对话;代码由Python语言实现。
C语言实现复数乘法计算 本文将使用C语言实现复数的乘法运算;