班级: 学号: 姓名: 实验时间: 年 月 日 指导教师: 陈顺凡 一.实验目的
理解网络信息安全的基本原理,掌握基本密码技术的原理及编程能力。 二.实验原理和内容 [凯撒介绍]
凯撒密码(kaiser)是罗马扩张时期朱利斯\"凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。 [加密原理]
凯撒密码的加密算法极其简单。其加密过程如下: 在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥)(在这里k1=k2,不妨记为k)。凯撒密码的加密过程可记为如下一个变换: c≡m+k mod n (其中n为基本字符个数) 同样,解密过程可表示为:
m≡c-k mod n (其中n为基本字符个数)
对于计算机而言,n可取256或128,m、k、c均为一个8bit的二进制数。显然,这种加密算法极不安全,即使采用穷举法,最多也只要255次即可破译。当然,究其本身而言,仍然是一个单表置换,因此,频率分析法对其仍是有效的。 .
[破解原理]
一篇包含字符的英文文章,其各ASCII码字符出现,都有一定的频率,下面是对Google上随意搜索到的英文文章进行分析的结果,见表: QUOTE:
================================================= FileName : 01.txt
[1] 32: times:204 [2] 101:e times:134 [3] 116:t times:91 [4] 105:i times:87 [5] 111:o times:77 [6] 108:l times:75 [7] 97:a times:75 [8] 110:n times:69 [9] 10:
times:67
[10] 115:s times:63
================================================= FileName : php.si.source.txt
[1] 32: times:576 [2] 101:e times:162 [3] 115:s times:153 [4] 110:n times:141 [5] 114:r times:138 [6] 105:i times:135 [7] 10: times:134
[8] 116:t times:129 [9] 42:* times:116 [10] 111:o times:103
================================================= FileName : work.txt
[1] 32: times:51322 [2] 101:e times:30657
[3] 116:t times:23685 [4] 97:a times:19038 [5] 111:o times:17886 [6] 105:i times:16156 [7] 110:n times:15633 [8] 114:r times:15317 [9] 115:s times:15226 [10] 104:h times:12191
================================================= FileName : 02.txt
[1] 32: times:299 [2] 101:e times:217 [3] 110:n times:136 [4] 105:i times:133 [5] 111:o times:124 [6] 116:t times:116 [7] 97:a times:110 [8] 115:s times:98 [9] 114:r times:92 [10] 108:l times:82
================================================= FileName : 03.txt
[1] 45:- times:404 [2] 32: times:394 [3] 101:e times:237 [4] 116:t times:196 [5] 114:r times:173 [6] 97:a times:163 [7] 105:i times:161 [8] 110:n times:153 [9] 111:o times:142 [10] 115:s times:129
================================================= FileName : 04.txt
[1] 32: times:326 [2] 101:e times:179 [3] 116:t times:106 [4] 105:i times:101
[5] 111:o times:96 [6] 110:n times:94 [7] 97:a times:92 [8] 115:s times:78 [9] 100:d times:61 [10] 114:r times:60
================================================= FileName : 05.txt
[1] 32: times:441 [2] 101:e times:191 [3] 111:o times:151 [4] 116:t times:120 [5] 97:a times:112 [6] 110:n times:108 [7] 105:i times:91 [8] 114:r times:84 [9] 117:u times:79 [10] 115:s times:79
有此分析可知,一篇英文文章中,出现较高频率的两个字符是 ' ' (空格) 和 'e',而且它们的ASCII码分别是32和101,差值是69。
既然凯撒密码利用的是单表替换的一种简单加密算法,所以,我们的主角, ' ' 和 'e' ,在解密后,依然会保持相同的ASCII码差值,69。
|c1 - c2| = |'e' - ' '| = |101 - 32| = 69
|m1 - m2| = | ((c1 + k) mod 256)-((c2 + k) mod 256)| = |c1 - c2| = |'e' - ' '| = 69
现在可以得到破解凯撒密码的原理了,我们统计一片经过凯撒加密的密文字符信息,在出现频率较高的字符里面寻找差值是69的2个字符,这两个必定是 ' ' 和 'e' 字符的加密字符,计算偏移量(既密钥key),通过解密运算,还原出明文。
实验要求 :用C++或java实现以上三个算法 , 包含“加密用的字符串(明文)、加密算法、加密后的密文、解密算法、破解算法、实验心得” 三.源代码
四.实验结果
因篇幅问题不能全部显示,请点此查看更多更全内容