鱼C论坛

 找回密码
 立即注册
查看: 16231|回复: 48

[技术交流] 10 - 凯撒加密的奥义

[复制链接]
发表于 2021-5-16 19:48:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 鱼C-小师妹 于 2021-6-4 19:17 编辑

在线视频:



download.jpg

《罗马帝王传》中描述了古罗马恺撒大帝在公元 2 世纪使用的一种加密方法。

它通过将字母按字母表中的顺序后移 3 位起到加密作用,如将字母 A 换作字母 D,将字母 B 换作字母 E,以此类推。

假如有这样一道命令 RETURN TO ROME,在用恺撒的方法加密之后就成为 UHWXUQ WR URPH 这样的密文。

这样即使被敌军截获,也无法从字面上获得有用信息。

在《罗马帝王传》中还说到解密方法:

如果想知道它们的意思,得用第4个字母置换第1个字母,即以D代A,以此类推。

当恺撒的将领们收到密文后,会按此法将密文还原,然后执行恺撒的命令。

虽然没有史书记载恺撒加密术在当时的效果如何,但是从恺撒所取得的军事成就来看,相信它在当时是安全可靠的。

现在我们利用计算机程序破解恺撒密码是轻而易举的事情!

今天我们就编写一个程序实现恺撒加密算法。

用英文输入一句话,只加密字母,加密规则是:

将字母 A 换作字母 D,B 变成 E……以此类推 X 将变成 A,Y 变成 B,Z 成 C。

加密时区分字母的大小写。

听起来是不是很有趣的亚子!!

为方便使用,我们先按照恺撒加密法的规则制成明文密文字母对照表,如下。

明文字母表: ABCDEFGHIJKLMNOPQRSTUVWXYZ

密文字母表: DEFGHIJKLMNOPQRSTUVWXYZABC

小写也是一样的哦。

这样通信时,利用对照表很容易实现明文和密文之间的转换了。

例如,明文是 I Love FishC 。

那么按照上面的映射规则,密文是:
游客,如果您要查看本帖隐藏内容请回复


我们人类是可以这样来用的,计算机怎么办呢?

最简单的方式就是利用 ASCII 码。

ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。

例如,大写字母 A 的 ASCII 码为 65,小写字母 a 的 ASCII 码为 97 。

利用 ord() 函数可以获取一个字符的 ASCII 码:

2021-05-23_17-24-28.jpg

如果知道一个字符的 ASCII 码,利用 chr() 函数可以将其转为对应的字符:

2021-05-23_17-25-51.jpg

补充一个知识点:

英文字母的大小写是分别连续的

大写字母 A - Z 的 ASCII 码是 65 - 90 。

小写字母 a - z 的 ASCII 码 是 97 - 122 。

大家可以去网上搜 ASCII 码表,这里就不配图咯。

现在来说下如何利用 ASCII 码进行恺撒加密的方法:

  • 对于字母 A~W 或 a~w,将字母的 ASCII 码加上 3
  • 对于字母 X~Z 或 x~z,将字母的 ASCII 码减去 23

第二点是因为 ASCII 码加 3 就会变成其他字符而非我们要的字母。

例如,要将 F 替换 I,可以进行如下操作:

  1. >>> chr(ord('F')+3)
  2. 'I'
复制代码

先将 ASCII 码加 3,然后再转为对应字母。

同样当处理 XYZ 或 xyz 时,需要折回到字母序列的开头,替换为 ABC 或 abc 。

例如,将 X 替换为 A,可以进行如下操作:

  1. >>> chr(ord('X')-23)
  2. 'A'
复制代码

这两个核心转换有了,剩下的就好说了!

我们先将输入的明文字符串存放到变量 text 中,再创建一个计数型循环结构,以计数器i作为字符串的下标。

逐个读取明文字符串 text 中的字符,加密后存放到密文字符串 secret 中。

循环控制条件是 i<len(text),其中 len() 函数用于获取字符串的长度。

判断如果 i<len(text) 为真,就从明文字符串 text 中读取一个字符,存放到变量 c 中。

如果为假,就意味着可以输出结果咯。

接下来判断 c 中的值,然后依次进行上面两种转换。

转换后将加密字符连接到字符串 secret 中。

如果不是字符我们就不加密啦,该是什么就是什么,直接放到 secret 中。

程序设计就是这样啦,学到现在,应该已经具备独立画成流程的能力咯!

这里请暂停视频自己去画,假设你画好啦,来看和小师妹的一样吗:

游客,如果您要查看本帖隐藏内容请回复


流程图有了,直接写代码: P10.py.zip (704 Bytes, 下载次数: 49, 售价: 6 鱼币)

2021-05-23_19-25-36.jpg

看起来很难的加密,就这么被我们用几行代码攻破咯!

好了,下课!

评分

参与人数 3荣誉 +16 鱼币 +6 贡献 +12 收起 理由
睦ちゃん她爹 + 5 + 3 学会!
bool想学C + 5 + 3 催更
不二如是 + 6 + 6 + 6 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-24 03:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表