目录
引言
故事
思路分析
代码实现
对代码的分析
信
写在最后的话
引言
古往今来,人们从未停止对信息的获取与对信息的保护(加密)。而在历史上,有一种加密方式广为人知;这种加密方式也给后来的加密方式的产生、发展提供了有益借鉴。“这种加密方式是什么呢?是,凯撒密码。”
“那么,什么是凯撒密码呢?我们怎么去理解它呢?在这篇博文中,也许,你会找到答案。”
故事
……
Caesar: "V'z fbeel gb urne gung lbh'ir pnhtug n pbyq, Pvpreb."
A few days later.
Cicero: "Nsgre erfg n srj qnlf, V sryy zhpu orggre, abj."
……
看了凯撒与西塞罗两人的对话后,是不是觉得云里雾里的呢?感觉,满满火星文的感觉……“那是因为凯撒与西塞罗两人对信的内容进行了加密哦。”
那么,我们有没有办法破解他们的信呢(虽然,这有点不道德。)?
……
思路分析
- 凯撒密码的核心思想,是,依照字母表,对字母进行位次的变换,从而实现对文本的加密。
- 让我们以字母“A”为例。
- 我们知道,英文字母表总共有26个字母,那么,可知,除去“A”后,还剩下25个字母。
- 这样,我们将很容易理解——当将“A”的位次向右移动26位时,我们又回到了初始位置“A”。
- “思考,如果我们只移动13位呢?”
- 将字母“A”向右移动13位,找到字母“N”(有没有发现,字母“N”再向右移动13位,我们就得到字母“A”了呢?)。
- 自然地,以13为密匙,我们能实现字母“A”与字母“N”的相互指代。
代码实现
# -*- coding: utf-8 -*-# Created by Violet. All rights reserved!#%%
# 调用函数库。import time as t#%%
# 创建字母表。Alp = dict()for y in (65,97): # Unicode编码中 "A"&"a" 的编码。for x in range(26): # 遍历26个字母。Alp[chr(x + y)] = chr(((x + 13) % 26) + y)#print(Alp) #%%
# 导入文本,加密/解密。while True:Txt = input("Encrypt or decrypt?")t.sleep(0.3)print("")print("".join(Alp.get(txt,txt) for txt in Txt))t.sleep(0.4)# 继续?print("\nPress Q/q to exit. (*'▽'*)♪")t.sleep(0.4)Ans = input('Que: Shall we continue?')if Ans in {"Q","q"}:breakelse:print("")pass#%%
# To be continued.
对代码的分析
- ……
- 既然要对文本进行加密/解密,那么首先,我们需要有一张字母表(用来转译)。“所以,在加密/解密前,我们要先制作这么一张字母表。”
- 在“Unicode编码”里——“A”的编码为“65”;“a”的编码为“97”。
- “chr()函数”:查找编码对应的字符串;“ord()函数”:查找字符串对应的编码。
- “思考,这么一个问题。”
- 字母表是用来转译用的,其格式为“A”表示“N”,之类的。那么,我们用什么类型(元组?列表?集合?字典?)来做这个字母表呢?字典!
- “授人以鱼不如授人以渔。”所以,对于创建字母表那段代码的理解,还望读者下来思考。
- ……
- Alp.get(txt,txt) for txt in Txt 的意思是——遍历“Txt字符串”里的每一个“txt字符”,用“get()函数”从字母表“Alp”中查找对应值,如果有,返回对应值,没有则返回原来的“txt”值。
- "".join(Alp.get(txt,txt) for txt in Txt) 的意思是,将转译后的字符连接起来(至于引号里为什么没有空格,因为,你输入的文本里已经有空格了,转译的时候空格也有被保留,所以,不需要再加空格了。)
- ……
- 当我们要转译很多的文本时,一次一次地按“F5键”会不会太麻烦呢?麻烦。“所以,我们用了一个 While循环 ,不过,要记得设置退出的路径。”
- 然后,当我们试运行程序时,发现,显示速度有点快,感觉怪怪的,,那么,就让我们使用“时间库time”来帮助我们吧(t.sleep())。
- To be continued.
- ……
信
那么,凯撒与西塞罗两人说了些什么呢?
……
Caesar: " I'm sorry to hear that you've caught a cold, Cicero."
Cicero: "After rest a few days, I feel much better, now."
……
(哔哔警告,打探别人的隐私是个坏习惯。)
写在最后的话
- “合抱之木,生于毫末。九层之台,起于累土。千里之行,始于足下。”
- 我想去北极看极光,我想在撒哈拉沙漠散步,我想在大堡礁潜水,我想去夏威夷,我想打卡自由女神像……“你也有着很多想去的地方吧?那么,让我们下定决心变好。”