频率分析法破译密码和破译原理 您所在的位置:网站首页 在线词频统计分析 频率分析法破译密码和破译原理

频率分析法破译密码和破译原理

2024-02-02 08:51| 来源: 网络整理| 查看: 265

密码棒

公元前5世纪的时候,斯巴达人利用一根木棒,缠绕上皮革或者羊皮纸,在上面横向写下信息,解下这条皮带。展开来看,这长串字母没有任何意义。

比如这样:

信差可以将这条皮带当成腰带,系在腰上。

比如这样:

然后收件人将这条皮带缠绕在相同的木棒上,就能恢复信息了。

前404年,一位遍体鳞伤的信差来到斯巴达将领利桑德面前,这趟波斯之旅只有他和四位同伴幸存,利桑德接下腰带,缠绕到他的密码棒上,得知波斯的发那巴祖斯准备侵袭他,多亏密码棒利桑德才能够预先防范,击退敌军。

频率分析解密法

密码棒是不是太简单了些?

加密者选择将组成信息的字母替代成别的字母,比如说将a写成1,这样就不能被解密者直接拿到信息了。

这难不倒解密者,以英文字母为例,为了确定每个英文字母的出现频率,分析一篇或者数篇普通的英文文章,英文字母出现频率最高的是e,接下来是t,然后是a……,然后检查要破解的密文,也将每个字母出现的频率整理出来,假设密文中出现频率最高的字母是j,那么就可能是e的替身,如果密码文中出现频率次高的但是P,那么可能是t的替身,以此类推便就能解开加密信息的内容。这就是频率分析法。

将明文字母的出现频率与密文字母的频率相比较的过程通过分析每个符号出现的频率而轻易地破译代换式密码在每种语言中,冗长的文章中的字母表现出一种可对之进行分辨的频率。e是英语中最常用的字母,其出现频率为八分之一

拷贝资料里面的 Util.java 和 FrequencyAnalysis.java 到项目的 com.atguigu.kaiser包下面 , article.txt 拷贝到项目文件夹的根目录

运行 FrequencyAnalysis.java 用来统计每个字符出现的次数

运行 FrequencyAnalysis.java 里面 main 函数里面的 encryptFile 方法 对程序进行加密

public static void main(String[] args) throws Exception { //测试1,统计字符个数 //printCharCount("article.txt"); //加密文件 int key = 3; encryptFile("article.txt", "article_en.txt", key); //读取加密后的文件 // String artile = Util.file2String("article_en.txt"); //解密(会生成多个备选文件) // decryptCaesarCode(artile, "article_de.txt"); }

在根目录会生成一个 article_en.txt 文件,然后我们统计这个文件当中每个字符出现的次数

public static void main(String[] args) throws Exception { //测试1,统计字符个数 printCharCount("article_en.txt"); //加密文件 int key = 3; //encryptFile("article.txt", "article_en.txt", key); //读取加密后的文件 // String artile = Util.file2String("article_en.txt"); //解密(会生成多个备选文件) // decryptCaesarCode(artile, "article_de.txt"); }

运行程序

我们来看看 频度分析法如何工作的

public static void main(String[] args) throws Exception { //测试1,统计字符个数 //printCharCount("article_en.txt"); //加密文件 int key = 3; //encryptFile("article.txt", "article_en.txt", key); //读取加密后的文件 String artile = Util.file2String("article_en.txt"); //解密(会生成多个备选文件) decryptCaesarCode(artile, "article_de.txt"); }

运行程序

运行结果 # 出现次数最多, 我们知道在英文当中 e 出现的频率是最高的,我们假设现在 # 号,就是 e ,变形而来的 ,我们可以对照 ascii 编码表 ,我们的凯撒加密当中位移是加了一个 key ,所以我们 猜测 两个值直接相差 -66 ,我们现在就以 -66 进行解密 生成一个文件,我们查看第一个文件发现,根本读不懂,所以解密失败,我们在猜测 h 是 e ,h 和 e 之间相差3 ,所以我们在去看第二个解密文件,发现我们可以读懂,解密成功

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有