Python小游戏:凯撒密码

news/2024/11/6 15:41:34/

目录

引言

故事

思路分析

代码实现

对代码的分析

写在最后的话


引言

古往今来,人们从未停止对信息的获取对信息的保护(加密)。而在历史上,有一种加密方式广为人知;这种加密方式也给后来的加密方式的产生、发展提供了有益借鉴。“这种加密方式是什么呢?是,凯撒密码。”

“那么,什么是凯撒密码呢?我们怎么去理解它呢?在这篇博文中,也许,你会找到答案。”


故事

……

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."

……

看了凯撒与西塞罗两人的对话后,是不是觉得云里雾里的呢?感觉,满满火星文的感觉……“那是因为凯撒与西塞罗两人对信的内容进行了加密哦。”

那么,我们有没有办法破解他们的信呢(虽然,这有点不道德。)?

……


思路分析

  1. 凯撒密码的核心思想,是,依照字母表,对字母进行位次的变换,从而实现对文本的加密。
  2. 让我们以字母“A”为例。
  3. 我们知道,英文字母表总共有26个字母,那么,可知,除去“A”后,还剩下25个字母。
  4. 这样,我们将很容易理解——当将“A”的位次向右移动26位时,我们又回到了初始位置“A”。
  5. “思考,如果我们只移动13位呢?”
  6. 将字母“A”向右移动13位,找到字母“N”(有没有发现,字母“N”再向右移动13位,我们就得到字母“A”了呢?)。
  7. 自然地,以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.

对代码的分析

  1. ……
  2. 既然要对文本进行加密/解密,那么首先,我们需要有一张字母表(用来转译)。“所以,在加密/解密前,我们要先制作这么一张字母表。
  3. 在“Unicode编码”里——“A”的编码为“65”;“a”的编码为“97”。
  4. “chr()函数”:查找编码对应的字符串;“ord()函数”:查找字符串对应的编码。
  5. “思考,这么一个问题。”
  6. 字母表是用来转译用的,其格式为“A”表示“N”,之类的。那么,我们用什么类型(元组?列表?集合?字典?)来做这个字母表呢?字典!
  7. “授人以鱼不如授人以渔。”所以,对于创建字母表那段代码的理解,还望读者下来思考。
  8. ……
  9. Alp.get(txt,txt) for txt in Txt 的意思是——遍历“Txt字符串”里的每一个“txt字符”,用“get()函数”从字母表“Alp”中查找对应值,如果有,返回对应值,没有则返回原来的“txt”值。
  10. "".join(Alp.get(txt,txt) for txt in Txt) 的意思是,将转译后的字符连接起来(至于引号里为什么没有空格,因为,你输入的文本里已经有空格了,转译的时候空格也有被保留,所以,不需要再加空格了。)
  11. ……
  12. 当我们要转译很多的文本时,一次一次地按“F5键”会不会太麻烦呢?麻烦。“所以,我们用了一个 While循环 ,不过,要记得设置退出的路径。”
  13. 然后,当我们试运行程序时,发现,显示速度有点快,感觉怪怪的,,那么,就让我们使用“时间库time”来帮助我们吧(t.sleep())。
  14. To be continued.
  15. ……

那么,凯撒与西塞罗两人说了些什么呢?

……

Caesar: " I'm sorry to hear that you've caught a cold, Cicero."

Cicero: "After rest a few days, I feel much better, now."

……

(哔哔警告,打探别人的隐私是个坏习惯。)


写在最后的话

  • “合抱之木,生于毫末。九层之台,起于累土。千里之行,始于足下。”
  • 我想去北极看极光,我想在撒哈拉沙漠散步,我想在大堡礁潜水,我想去夏威夷,我想打卡自由女神像……“你也有着很多想去的地方吧?那么,让我们下定决心变好。

http://www.ppmy.cn/news/665925.html

相关文章

利用Python给信用卡设置默认密码

创建信用卡类,并且为该类创建一个构造方法,该构造方法有3个参数,分别是self、卡号和密码。其中,密码可以设置一个默认值123456,代表默认密码。在创建类的实例的时,如果不指定密码,就采用默认密码…

单表代换密码(凯撒密码)

单表代换密码概述 对所有的明文字母都用一个固定的代换进行加密 ,因而称为单表代换密码。加密过程中是从明文字母表到密文字母表的一一映射。例:恺撒(Caesar)密码。缺点:不能抗击字母频度分析,容易被破译单表密码的弱点…

了解世界杯赔率,让您运气更‘好‘(个人分享)

足球世界杯买球赢面计算 前言理论基础实际计算用例:代码实现真实数据 前言 此文是个人关于世界杯的一些浅显的看法,实际统计结果和计算方法有出入,可能原因:1)数据量不够。2)比赛双方差距够大导致的。但在…

海外观看2022卡塔尔世界杯中文直播攻略大全

足坛最顶级赛事非四年一届的世界杯莫属,强者之间的较量是球迷们喜闻乐见的,梅西、C罗、本泽马、姆巴佩等球星的表现更令人期待,每届世界杯总会给球迷带来一场久违的狂欢和视觉盛宴,2022卡塔尔世界杯又会给球迷们带来哪些惊喜&…

idea连接MYSQL报错汇总

idea连接MYSQL报错汇总 【The last packet sent successfully to the server was 0 milliseconds ago.The driver has not received any packets from the server.】 原因:mysql57 运行在非默认端口号 解决: 1.测试本地连接mysqsl57 打开C:\ProgramDa…

爱普生打印机清零软件

已下是支持的型号 http://链接:https://pan.baidu.com/s/1xoQi1QxwNNcgCYo-6OrhIw 提取码:Y009 --来自百度网盘超级会员V2的分享

Java常用数据库列表

1、MySQL MySQL是一种开源的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现在由Oracle公司负责维护和支持。MySQL是最流行的数据库之一,被广泛用于各种应用程序和网站开发。 MySQL具有以下特点: …

【MySQL】利用SQL短路,解决无数据表连接问题

系列文章 MySQL安装教程(详细) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/126037520 MySQL卸载教程(详细) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129279265 …