【密码学】一文读懂凯撒密码

简介: 之前介绍了很多现代密码学相关的知识,俗话说得好,要站在巨人的肩膀上, 因此呢,接下来聊一聊古典密码的有关知识(才不是因为我现在没素材了, 手动狗头),古典密码相比于现代密码而言,更多的是一些trick或者说文字游戏,不过其中所蕴含的思想在现代密码当中也广泛出现,本文主要给大家介绍一下凯撒密码,这个古老但是又被众人都知晓的一个古典密码。

古典密码之凯撒密码


J%@CTE4K5X8)K625}H[ZH[M.jpg凯撒密码

之前介绍了很多现代密码学相关的知识,俗话说得好,要站在巨人的肩膀上, 因此呢,接下来聊一聊古典密码的有关知识(才不是因为我现在没素材了, 手动狗头),古典密码相比于现代密码而言,更多的是一些trick或者说文字游戏,不过其中所蕴含的思想在现代密码当中也广泛出现,本文主要给大家介绍一下凯撒密码,这个古老但是又被众人都知晓的一个古典密码。


历史

盖乌斯·尤利乌斯·恺撒(Gaius Julius Caesar,公元前100年7月13日—公元前44年3月15日) ,史称恺撒大帝,又译盖厄斯·儒略·凯撒、加伊乌斯·朱利叶斯·凯撒等,罗马共和国(今地中海沿岸等地区)末期杰出的军事统帅、政治家,并且以其优越的才能成为了罗马帝国的奠基者。

恺撒出身贵族,历任财务官、祭司长、大法官、执政官、监察官、独裁官等职。

公元前60年与庞培、克拉苏秘密结成前三头同盟,随后出任高卢总督,在8年的时间里征服了高卢全境(今法国一带),还袭击了日耳曼和不列颠。公元前49年,他率军占领罗马,打败庞培,集大权于一身,实行独裁统治。制定了《儒略历》。

据说,凯撒大帝对于"凯撒密码"特别喜欢,在他的日常通信过程当中,也都采用了这种加密方法,因此,凯撒在战争当中占据了优势地位,虽然说,在现代来看,这个密码确实比较low, 但是在当时,凯撒的对手们,也是无法获取通信内容的。


算法概述

凯撒密码的过程非常简单,这里不会有现代密码当中辣么多数学知识,应该是比较通俗易懂的,具体原理是: 将每个英文字母用其随后的三个字母来代替,也就是A->D, B->E, ..., x->A, Y->B, Z->C。因此的明文的LittleQ, 可以改写为OlwwohT, 如下图所示:

O0_8`()H7C2F291FHSP~B7Q.png

image.gif凯撒密码

这看起来似乎是比较简单,本质上,这是对字母的一个替换操作,如果说在英文字母表当中可以做任意移位,那么就会有26!种情况,利用乘法原理比较容易计算,在这里就不详细展开了。

如果说,采用数学公式来表示凯撒密码(n=3),那么将会是如下的一个表示:

  • 加密算法:
  • 解密算法:

其中n是密钥,当然这里的密钥空间比较小,只有25个, 特别的,如果n取13的话,这个密码也是有名字的,被称之为ROT13, 对于n=13,有个特殊的性质: , 也就是加密和解密实际是一个函数,要是有读者大佬不相信,可以自己试试, 我在下面贴一个ROT13的替换表蛤。

  • 「输入」: ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • 「输出」: NOPQRSTUVWXYZABCDEFGHIJKLM


思考

对于凯撒密码,这个原理看起来非常简单,只是一个对于字母的替换操作,但是替换操作在现代密码学当中也比较常见。


回忆一下,我们之前讲过的DES加密,开始有一个置换的操作,这里是对比特进行的一个替换,本质上也是一个替换操作,和对于字母的替换操作有着异曲同工之妙(如果忘记了DES结构的读者, 可以翻翻我之前写的文章, 或者自行查阅一下相关资料, 这里就不再展开讲了)。


突然想到一句诗词, 众里寻他千百度, 蓦然回首那人却在灯火阑珊处, 看了这么多现代密码学的知识, 有些思想古人其实已经再用了, 只是没有形成单独的体系, 所以说, 了解一些密码学发展史, 有可能会对密码学当中的某些操作有新的认识。

相关文章
|
数据安全/隐私保护
CTF密码学·置换密码,栅栏密码,曲路密码
1.置换密码 置换密码(Permutation Cipher)又叫换位密码(Transposi-tionCipher),它根据一定的规则重新排列明文,以便打破明文的结构特性。置换密码的特点是保持明文的所有字符不变,只是利用置换打乱了明文字符的位置和次序
1919 1
CTF密码学·置换密码,栅栏密码,曲路密码
|
数据采集 Web App开发 JSON
浏览器插件:WebScraper基本用法和抓取页面内容(不会编程也能爬取数据)
本文以百度为实战案例演示使用WebScraper插件抓取页面内容保存到文件中。以及WebScraper用法【2月更文挑战第1天】
1695 2
浏览器插件:WebScraper基本用法和抓取页面内容(不会编程也能爬取数据)
|
存储 算法 C++
【C/C++ Vector容量调整】理解C++ Vector:Reserve与Resize的区别与应用
【C/C++ Vector容量调整】理解C++ Vector:Reserve与Resize的区别与应用
1446 1
|
SQL 缓存 安全
GreenDao查询,Querying
GreenDao查询,Querying
|
存储 安全 API
如何对 API 进行安全加密?
对API进行安全加密是保障数据安全和系统稳定的重要措施
1167 60
|
SQL XML Java
Mybatis的原理和MybaitsPlus
这篇文章对比分析了Mybatis和Mybatis Plus的特点与底层实现机制,探讨了两者之间的差异及各自的优势。
404 0
|
SQL Web App开发 安全
Discuz历史漏洞分析(一)
Discuz是非常受欢迎的论坛型CMS,但是近年来DZ也爆出了很多经典漏洞,以下分析了几个不同类型的DZ历史漏洞(SQL注入、XSS、任意文件删除、弱加密算法、任意代码执行、HTTP HOST攻击等),提高安全人员的安全意识。
Discuz历史漏洞分析(一)
|
存储 Java
Java线程池参数详解及其示例
Java线程池参数详解及其示例
303 0
|
存储 编译器 测试技术
【编译原理】LL(1)分析法:C/C++实现
【编译原理】LL(1)分析法:C/C++实现
1256 0
uniapp获取微信用户信息登录
uniapp获取微信用户信息登录
183 0