难度 | <! – 8 – > |
所需时间 | 短(2-5天) |
先决条件 | 使用Python或您选择的其他编程语言的经验。 |
材料可用性 | 这个项目需要一台电脑。 |
安全 | 没有问题 |
摘要
当您听到”加密” 这个词时,您可能会想到现代计算机以及电子邮件和在线银行账户等内容。但是你知道加密已经存在了几千年了吗?在这个项目中,您将了解Caesar密码,这是一种简单的加密方式,用另一个字母替换字母表中的每个字母,并演示现代计算机如何在几秒钟内破解这些古老的代码。
目的
编写一个程序来解密用Caesar密码加密的文本。
积分
引用本页
此处提供了一般引用信息。请务必检查所使用方法的格式,包括大小写,并根据需要更新引文。
MLA风格
APA风格
最后编辑日期:2019-01-26
简介
你有没有想过向朋友发送一条秘密消息?如果某人(如家长或教师)截获该消息并将其读取,该怎么办?为了确保只有你的朋友能够阅读该消息,即使它被截获,首先你需要加密它.加密是对邮件进行编码的过程,因此只有预期的收件人才能阅读邮件。加密用于保护我们的许多日常在线活动,如电子邮件和信用卡交易,以防止未经授权的访问。
现代加密算法非常复杂且(理想情况下)难以破解。然而,在计算机存在之前,加密已经存在了数千年。历史上的领导者使用各种类型的加密技术在战争期间向盟国和军事领导人发送信息。一个着名的例子是 Caesar密码,由古罗马的Julius Caesar使用。凯撒密码是替换密码的一个例子,其中字母表中的每个字母(英文,26个字母)被字母表中的另一个字母替换。这是通过将整个字母”移动” 一定数量的空格来完成的。此号码称为键。例如,这里是3的移位(注意字母表从末尾”包裹” ):
原始字母: | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
移位字母: | DEFGHIJKLMNOPQRSTUVWXYZABC |
要对消息进行编码,原始消息中的每个字母(称为明文)将替换为移位字母表中正下方的字母(A变为D,B变为E,依此类推)。结果称为密文。这是使用3的移位加密的纯文本消息:
明文: | 这是一封秘密消息 |
密文: | WKLV LV D VHFUHW PHVVDJH |
为了分享秘密消息,您和您的朋友需要提前同意密钥。然后,您可以使用密钥加密消息,并且您的朋友可以使用相同的密钥(在相反方向上移动字母表)来解密它们。拦截消息的任何人如果不知道密钥就无法阅读。
但是,如果一个非常坚定的人想要破解你的代码呢?他们怎么能这样做?凯撒密码的一个主要弱点是它容易遭受暴力攻击,一种尝试所有可能的密钥来解密消息的攻击。由于英语中只有25个可能的键(使用26键可以回到原始字母表),对于非常短的加密消息,手动尝试所有键都不会花费很长时间。例如,这是一个简短的加密消息(请注意,这个简单版本的Caesar密码只会改变字母;标点符号保持不变)。
如果我们尝试使用1的移位来解密此消息会怎样?这意味着在加密过程中,A变为B,B变为C,依此类推。为了解密消息,我们向后工作(B变为A,C变为B,依此类推)。如果我们在整个消息上尝试这个,我们得到这个结果:
该消息仍然是胡言乱语,所以我们知道1不是关键(假设原始消息实际上是英文!)。您可以尝试使用其他24个可能的密钥解密消息吗?继续尝试不同的键,直到你得到一个英语有意义的句子。你手动做多久需要多长时间?
另一种可用于破解Caesar密码(或任何其他类型的替换密码)的方法是频率分析。频率分析是基于某些字母在英文写作中出现不同频率的事实 – 例如,E通常最常出现,其次是T和A;而Q和Z出现次数最少(图1)。

图1。英文字母频率。
例如,请查看此加密文本:
大号PZ AOL TVZA MYLXBLUA SLAALY PU AOPZ ZLUALUJL |
如果算上字母,你会注意到L的出现频率高于其他任何字母(9次)。因此,如果这是替换密码并且原始消息是英语,则L代表E是安全的猜测.L与字母表中的E相距7个空格。如果您使用7的密钥向后工作解密此消息会发生什么(L变为E,M变为F,依此类推)会发生什么?
对于非常短的消息,手动执行暴力攻击或频率分析可能很容易,但对于整个段落或文本页面来说可能会非常耗时。这是编写计算机程序为您完成工作的地方派上用场。在本项目的过程中,您将编写自己的程序,可以首先使用Caesar密码加密明文,然后尝试使用强力攻击和频率分析来解密文本。
术语和概念
-
- 加密
-
- 凯撒密码
- 替代密码
-
- 关键
- 明文
- 密文
-
- 暴力攻击
- 频率分析
- 模
问题
-
- 什么是替代密码?
- Caesar密码如何工作?
- Caesar密码如何易受攻击?为什么这会使它成为现代加密的不良选择呢?
参考书目
-
- 学习密码学(n.d.). Caesar Cipher 。检索自2017年7月11日起 https://learncryptography.com/classical-encryption/caesar-cipher
- Rodriguez-Clark,D。(n.d。).频率分析:打破守则。加密角。检索自2017年7月11日起http://crypto.interactive-maths.com/frequency-analysis-breaking-the-code.html
- Shaw,Z。(n.d。).艰难地学习Python 。检索自2017年7月11日起 https://learnpythonthehardway.org/python3/
材料和设备
-
- 使用您选择的编程语言的计算机.Python 3可以从 https://www.python.org/downloads/免费下载
- 实验室笔记本
实验程序
网络安全项目可能很有趣,但如果您不小心,它们也会让您陷入困境。在进行网络安全项目时,请确保遵循这些规则:
- 未经个人(或拥有计算机的人)的同意,不得攻击任何个人,计算机,系统或网络。例如,除非您先获得他们的许可,否则不要试图猜测某人的电子邮件密码并登录他们的帐户,或者在未经网站所有者许可的情况下尝试入侵网站。
- 即使您同意进行攻击,攻击也应仅用于学习目的,您应该帮助个人或组织解决您发现的任何问题(这称为”白帽” 黑客行为)。例如,如果您能够猜出某人的密码,您应该告诉他们他们需要选择一个更强的密码(并帮助他们学习如何)。不要阅读他们的电子邮件,更改他们的任何帐户设置,查看私人信息或图片等文件,或告诉其他人他们的密码.
- 如果您的项目涉及人类受试者,即使您已经同意,您仍可能需要获得您的科学博览会或机构审查委员会的批准(类似于心理学或医学实验规则)。看到此页面了解更多信息。
- 不要伪装成在线的其他人,公司或其他组织。这包括伪装成社交媒体网站上的其他人,设置虚拟网站,使其看起来像信誉良好的公司的真实网站,或发送”网络钓鱼” 或其他设计看起来像是由其他人发送的电子邮件.(一项对照实验,只有研究参与者才能访问此类网站或电子邮件的示例。)
- 不要使用非法获取的数据(例如,从公司员工数据库中窃取的联系信息),即使它被其他人窃取并已在网上发布。
- 不要公开发布敏感的个人信息,即使是经过同意获得的。例如,如果您的项目涉及访问人们的联系信息(合法),请不要在科学展览会的”结果” 部分发布某人的姓名和地址。完成项目后,您应该销毁任何此类信息(通过粉碎纸张或删除文件)。
- 请勿在连接到互联网的计算机上安装或运行任何恶意软件(病毒,恶意软件,间谍软件,特洛伊木马等)。该软件很容易传播到其他计算机,并失去控制.
如果您对项目有任何疑问或疑问,请在开始之前咨询您的老师或科学博览会管理员。
如果您在Python中执行此项目,您可能需要确保在开始之前知道如何使用该语言的以下功能(或者您选择的程序中的等效功能)。
-
- 列表
-
- 字符串
-
- IF语句
- FOR循环
- 模数运算符(%)
如果你在编写程序时遇到困难,在线搜索一般的东西(如”python if statement” )或特定的(如”如何从python中的文本文件中读取字符串” )通常会给出有用的结果。
-
- 在您的计算机上,写一个句子或短段(或从此页面复制一个)并将其另存为文本文件.
- 编写一个程序:
-
- 从文本文件中读取明文字符串。
- 使用带有随机生成的密钥的Caesar密码加密字符串。您可以使程序仅更改字母A-Z并保持其他字符(数字,标点符号,空格)不变。
-
- 将密文保存为新的文本文件。
-
-
- 编写程序以对密文执行暴力攻击。如果您需要有关蛮力攻击如何工作的提醒,请参阅背景部分。该计划应:
-
- 从文本文件加载加密的字符串。
- 尝试所有25个可能的密钥来解密密文,将每个结果保存在一个新字符串中。
- 查看所有25个结果字符串。他们中的大多数应该是胡言乱语。他们中的任何一个都有意义吗?你能弄清楚哪一个是正确的钥匙吗?
-
- 编写程序以对密文执行暴力攻击。如果您需要有关蛮力攻击如何工作的提醒,请参阅背景部分。该计划应:
-
- 编写程序以对密文执行频率分析。如果需要有关频率分析如何工作的提醒,请参阅背景部分。该计划应:
-
- 从文本文件加载加密的字符串。
- 计算密文中每个字母出现的次数,并找出最常出现的字母。
- 使用此信息计算密钥(假设最常见的字母对应于明文中的字母E)。
- 使用您计算的密钥解密文本。产生的明文是否有意义?如果没有,你认为出了什么问题? (提示:小心频率分析,E可能不是单个句子或短段落中最常见的字母)
-
- 编写程序以对密文执行频率分析。如果需要有关频率分析如何工作的提醒,请参阅背景部分。该计划应:
- 测试你的程序。在线搜索已经使用Caesar密码加密的文本(因此您不能通过已知的答案”欺骗” )并尝试使用您的程序对其进行解密。您还可以在以下文本块上测试您的程序。哪种方法对每个消息,暴力或频率分析更有效?
示例1: BNMFQZSTKZSHNMR! XNT GZUD BQZBJDC SGD BNCD! 示例2: UZU PFL KYZEB KYZJ GIFAVTK NRJ WLE? TYVTB FLK KYV
CVRIE DFIV JVTKZFE KF CVRIE RSFLK TRIVVIJ ZE TPSVIJVTLIZKP。
如果你喜欢这个项目,你可能会喜欢探索这些相关的职业:
变体形式
-
- 您可以扩展您的Caesar密码程序,以便加密其他字符(字母,标点符号,空格)吗?
- 凯撒密码只是一种替代密码。还有许多其他类型的替代密码,包括旨在破坏频率分析的更复杂的类型。你能编写一个程序来使用不同类型的密码来加密和解密消息吗?
- 此项目要求您手动检查解密程序的结果,以查看解密是否有效。如果您需要解密许多单独的消息,这仍然是耗时的。你能自动化这个过程吗? (提示:进行网络搜索”python检查一个单词是否为英文” )
- 对于短文本块,频率分析不太可靠,其中E可能不是最常见的字母。检查不同长度的各种文本块(例如,从您喜欢的网站或书中获取)。平均而言,在E成为最常见的字母之前,用英语写的字符串需要多长字符?
- 通过告诉您原始邮件是用英语编写并使用凯撒密码加密,这个项目让您”轻松” 。在现实世界中,当你拦截一条消息时,你可能根本不知道它是如何加密的,甚至不知道它是用什么语言编写的。你能编写一个尝试使用多种类型的替换密码来解密消息的程序吗?如果程序适用于用西班牙语或其他语言编写的消息?
- 找一位合作的朋友。编写自己的加密算法并挑战你的朋友破解它,反之亦然。
- 与其他人共享您的程序,并使用它来加密和解密您互相发送的邮件(例如,在您的计算机上进行加密,通过电子邮件发送加密文本,收件人可以在其计算机上解密)。你认为永远使用同一把钥匙是否安全?你能想出一个改变密钥的系统吗,例如根据日期?