凯撒密码加密算法python_Python密码学⼊门:凯撒密码
1 什么是密码学
手机拍照直方图怎么看⾃古以来,间谍、⼠兵、⿊客、海盗、商⼈等⼈,⼤多依靠密码学来确保他们的秘密不会⼈尽皆知。密码学是⼀门使⽤秘密编码的学科。想要明⽩密码长什么样,看⼀看下⾯两段⽂本。
nyr N.vNwz5uNz5Ns6620Nz0N3z2v
N yvNwz9vNz5N6!9Nyvr9
y0QNnvNwv tyNz
Nw964N6!9N5vzxys690,N.vN2z5u-
3vNz Nr Ny64v,N.vNt644!5ztr vNz
N 6N6 yv90,Nr5uNz Nsvt64v0N
yvN7967v9 BN6wNr33Q N-m63 rz9v
!NN2 Nuwv,N9,vNN!vNrBN3zyN4vN
怎么安装plc编程软件N6 Qvv0z6nvN.7N0yv4N 4 zzvNN
vyN,NN99z0zz6wz0y3vv26 9
w296vyNNrrNyQst.560N94Nu5y
爬虫软件 免费rN5nz5vv5t6v63zNr5.
N75sz6966NNvw6 zu0 wtNxs6t
49NrN3Ny9Nvzy!
以上左侧的⽂本是⼀个经过加密(转换为秘密编码)的消息。对于那些不知道如何将密码解密(将其转换回原始的英⽂消息)的⼈来说,它完全不可读。⽽以上右侧的⽂本是随机的“胡⾔乱语”,没有任何隐藏的含义。加密使不懂得如何解密的⼈即便拿到了密码,也⽆法参透其中的含义,因为加密后的消息和随机的“胡⾔乱语”毫⽆区别。
密码学家使⽤和研究密码。当然,这些秘密消息并不总是保密的。密码分析学家,⼜称为密码破解者或⿊客,可以破解密码并读懂他⼈的加密消息。本书讲解如何使⽤各种技术对信息进⾏加密和解密。
2 编码与密码
与密码不同的是,编码的⽅式是可以公开获得并理解的。编码使⽤符号替换消息中的内容,任何⼈都可以查阅符号是如何进⾏翻译的。
19世纪初,⼀个著名的编码来源于电报的发展,它使各地通过电线进⾏即时通信成为现实。⽤电报发送信息⽐之前骑马去送⼀⼤袋信件的传统⽅式要快得多。然⽽,电报不能直接发送纸上书写的字母,它只能发送两种类型的电脉冲:称为“点”的短脉冲和称为“线”的长脉冲。
要将字母表中的字母转换成脉冲类型中的点和线,需要⼀个编码系统将英语翻译成电脉冲。英语转换成电报发送的点和线的过程称为编码,⽽收到消息时把电脉冲转换成英语的过程称为解码。电报(和后来的⽆线电)对消息进⾏编码和解码的⽅式称为摩尔斯电码,如表1-1所⽰。摩尔斯电码是由Samuel Morse和Alfred Vail开发的。
前后端开发流程
电报操作员通过在拥有⼀个按钮的电报机上敲击点和线,可以向世界另⼀边的⼈传达英语信息,⽽且仅需要很短的时间!java bigdecimal加减乘除 比较大小
与编码相对,密码是⼀种特定类型的编码⽅式,⽬的是保证消息的机密性。可以使⽤密码将可理解的英⽂⽂本(称为明⽂)转换为隐藏秘密的乱码(称为密⽂)。密码是使明⽂和密⽂相互转换的⼀组规则。这些规则中,通常会使⽤⼀个只有通信者知道的密钥来进⾏加密或解密。在这本书中,读者将学习⼏个密码,并编写程序来使⽤这些密码对⽂本进⾏加密和解密。但在此之前,让我们先⽤简单的纸质⼯具⼿动完成⽂本加密。
3 凯撒密码
即将学习的第⼀个密码是凯撒密码,它以早期使⽤者Julius Caesar的名字命名。它简单易学,但也因此极易被密码分析员破解。但是,它仍然可以⽤来进⾏练习。
凯撒密码通过替换字母完成加密,每个字母由字母表中其后特定位数的字母代替。例如,Julius Caesar将字母表向后移动3个字母的位置,然后⽤得到的新字母表中的字母替换原消息中的每个字母。
例如,消息中的每⼀个A都变成D,每个B都变成E等。当Caesar需要将字母表末尾的字母(如Y)移位时,他会绕回到字母表的开头,移动3个位置到B。在本节中,将使⽤凯撒密码⼿动加密消息。
3.1 密码轮
为了更⽅便地使⽤凯撒密码将明⽂转换为密⽂,将使⽤⼀个密码轮,也称为密码盘。密码轮包含两个由字母组成的环,每个环有26个槽(为字母表的26个字母准备)。外圈表⽰明⽂中的字母,内圈表⽰在密⽂中相对应的字母。内圈同样把字母从0到25进⾏标号,这些数字代表加密密钥,这⾥的加密密钥是指将A移动到内环上对应的字母所需经过的字母位数。因为是圆形的,⽤⼤于25的密钥移位会使字母表绕⼀整个圈,所以移动26位与移动0位相同,移动27位与移动1位相同,以此类推。
读者可以通过原书⽹站在线访问虚拟的密码轮,其形式如图1-1所⽰。为了旋转密码轮,需要先单击它,然后移动⿏标光标,直到想要的配置到位。再次单击⿏标,密码轮停⽌旋转。
在本书的配套资源中也可以获得可打印的纸版密码轮。剪下两个圆圈,把它们叠放,⼩的圆圈放在⼤的圆圈中间。在两个圆圈的中⼼插⼊⼀个⼤头钉或曲头钉,这样它们就可以旋转了。
⽆论使⽤纸质密码轮还是虚拟密码轮,都可以完成⼿动加密。
图1-1 在线密码轮
3.2 使⽤密码轮进⾏加密
开始加密前,请先⽤英⽂在⼀张纸上写下待加密的消息。在这个例⼦中,待加密消息是“THE SECRET PASSWORD IS ROSEBUD”。接下来,旋转密码轮的内轮,直到它的槽与外轮中的槽相匹配。注意外轮上字母“A”旁边的点,点在内轮上最接近的数字就是加密密钥。
例如,在图1-1中,外轮的“A”对应内轮的8。现在使⽤8作为加密密钥来加密上⾯例⼦中的消息,如图1-2所⽰。
图1-2 ⽤8作为密钥的凯撒密码加密消息
在外轮上到消息中的每⼀个字母,并⽤内轮中对应的字母替换它。在这个例⼦中,消息的第⼀个字母是“T”(在“THE SECRET…”中的第⼀个“T”),因此在外轮上到字母“T”,然后在内轮上到对应的字母,也就是字母“B”。秘密信息总是⽤“B”替换“T”。(如果使⽤不同的加密密钥,则明⽂中的每个T将被替换为其他的字母。)消息中的下⼀个字母是“H”,加密时变成“P”,⽽字
母“E”变成“M”。外轮上的每个字母总是加密为内轮上固定的对应字母。为了节省时间,在查“THE SECRET…”中的第⼀
个“T”并且发现它加密变成“B”之后,就可以将消息中的每个“T”都替换为“B”,因此每个字母只需查⼀次。
在对整个消息进⾏加密之后,原始消息“THE SECRET PASSWORD IS ROSEBUD”就变成了“BPM AMKZMB XIAAEWZL QA ZWAMJCL”。注意,⾮字母字符(如空格)是没有改变的。
现在,可以把这个加密后的消息发送给他⼈(或者⾃⼰保存),除⾮告诉他们密钥,否则没有⼈能够读懂消息的含义。请确保加密密钥是保密的,因为任何知道消息是⽤密钥8加密的⼈都可以读懂密⽂。
3.3 使⽤密码轮进⾏解密
要对密⽂进⾏解密,需要查从密码轮的内轮到外轮的映射。假设接收的密⽂为“IWT CTL EPHHLDGS XH HLDGSUXHW”,除⾮知道密钥(或者是⼀个聪明的⿊客),否则将⽆法解密该消息。幸运的是,朋友已经提前告知,他们对消息加密时使⽤的密钥是15。该密钥的密码轮如图1-3所⽰。
图1-3 密钥设为15的密码轮
现在可以将外轮上的字母“A”(下⾯带点的那个字母)与内轮上的数字15(字母“P”)相对应。然后,在内轮上到密⽂的第⼀个字母,即“I”,并查看外圈对应的字母,即“T”。密⽂中的第⼆个字母“W”解密为字母“H”。对密⽂中剩下的字母进⾏解密,还原成明
⽂,可以得到完整的消息“THE NEW PASSWORD IS SWORDFISH”,如图1-4所⽰。
图1-4 ⽤密钥为15的凯撒密码解密消息
如果使⽤不正确的密钥(如16),则解密的消息将是“SGD MVV OZRRVNQC HR RVNQCEHG”,依然不可读。除⾮使⽤正确的密
钥,否则解密出来的消息也是不可理解的。
3.4 通过计算进⾏加密和解密学python编程入门
使⽤密码轮实现凯撒密码的加密和解密是⼗分便捷的,但是也可以通过数学计算进⾏加密和解密。在此过程中,从“A”到“Z”写出字母
表中的字母,在每个字母下标注数字0~25。从“A”下⾯的0开始,“B”下⾯是1,以此类推,直到“Z”下⾯是25,如图1-5所⽰。
可以⽤这些数字来表⽰对应的字母。这是⼀个强有⼒的概念,有了它的存在,就可以在字母上进⾏数学运算。如果将字母“CAT”表⽰为数
字2、0和19,分别加3获得数字5、3和22,则根据图1-5,这些新的数字表⽰字母“FDW”,这样就实现了为“CAT”加密。稍后,会
设计⼀个计算机程序实现这⼀计算过程。
要运⽤算术实现凯撒密码的加密,请到要加密的字母下⽅的数字,并将其加上密钥的值,得到的和就是对应密⽂字母下的数字。可以使⽤1~25的任意数字作为密钥,例如,使⽤密钥13加密“HELLO. HOW ARE YOU?”。⾸先,到“H”下的数字7,然后加上13:7+13=20。因为数字20在字母“U”之下,所以字母“H”加密得到“U”。
类似地,加密字母“E”(4)为4 + 13=17。因为17对应的是“R”,所以“E”加密得到“R”,以此类推。
直到字母“O”之前的过程都很顺利。“O”之下的数字是14,但是14加上13是27,⽽序号只到25。如果字母对应的数字和密钥相加的和是26或者更多,则需要从结果中减去26。在此例中,27−26=1。1对应的字母是“B”,因此“O”⽤密钥13加密得到“B”。消息中的每⼀个字母加密完成后,密⽂是“URYYB. UBJ NER LBH?”
要对密⽂进⾏解密,需要减去密钥⽽不再是进⾏加法运算。密⽂字母“B”对应的数字是1,1减去13得到−12。类似于“减去26”的加密规则,当解密结果⼩于0时,需要加上26。因为−12 + 26=14,所以密⽂字母“B”解密为“O”。
本⽂摘⾃刚刚上架的《Python密码学编程 第2版》,[美] 阿尔·斯维加特(Al Sweigart) 著,郑新芳,赵怡翾 译。
本书是学习⽤Python编程实现加密算法的初学者指南
本书附带⽰例源代码,帮助读者学以致⽤
本书配有课后习题及答案,可帮助读者加深知识理解
通过阅读本书,您将学习如何通过 Python 编程制作和破解密码,以此创建和发送密⽂!学习 Python 编程的基础 知识之后,您将从使⽤反向和凯撒密码的简单程序开始,了解为公开密钥加密的⽅法,该加密⽅法⽤于保护在线事务的 正常运作,包括数字签名和电⼦邮件。另外,您还将学习如何使⽤经典密码(如置换密码和维吉尼亚密码)对⽂本进⾏加密。 每个程序都包含完整的代码和逐⾏说明。本书结尾,您将学习如何使⽤ Python 进⾏编码。
您还将学习以下内容:
将循环、变量和流控制语句组合到实际的⼯作程序中;
使⽤字典⽂件检测解密的消息是有效的英⽂还是乱码;
创建并测试程序以确保代码正确加密和解密;
对仿射密码进⾏编码(破解)的⽰例(使⽤模块化算术对消息进⾏加密);
使⽤暴⼒算法和频率分析等技术破解密码。
简要⽬录
第1章 制作纸质密码学⼯具免费
第2章 在交互式运⾏环境中编程免费
第3章 字符串及编写程序
第4章 反向密码
第5章 凯撒密码
第6章 ⽤暴⼒算法破解凯撒密码

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。