凯撒密码加密算法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小时内删除。
发表评论