《网络信息安全》
(2011-2012学年第2学期)
实 验 报 告
实验三 加密算法
实验3-1古典密码算法
一、实验目的
通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。
二、实验原理
古典密码算法曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。 1.替代密码(循环移位密码)
替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。例如,明文字母a、b、c、d,用D、E、F、G做对应替换后形成密文。
替代密码包括多种类型,如单表替代密码、多明码替代密码、多字母替代密码、多表替代密码等。下面我们介绍一种典型的单表替代密码——恺撒(Caesar)密码,又叫循环移位密码。它的加密方法就是将明文中的每个字母用此字符在字母表中后面第k个字母替代。它的加密过程可以表示为下面的函数:
E(m)=(m+k)mod n
其中,m为明文字母在字母表中的位置数;n为字母表中的字母个数;k为密钥;E(m)为密文字母在字母表中对应的位置数。
例如,对于明文字母H,其在字母表中的位置数为8,设k=4,则按照上式计算出来的密文为L,计算过程如下:
E(8)=(m十k)mod n=(8+4)mod26=12=L
2.置换密码(换位密码)
置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改变,从而实现明文信息的加密。置换密码有时又称为换位密码。
矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给定的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中的字母,从而形成密文。例如,明文为attack begins at five,密钥为cipher,将明文按照每行6个字母的形式排在矩阵中,形成如下形式:
a t t a c k
b e g i n s a t f i v e
根据密钥cipher中各字母在字母表中出现的先后顺序,给定一个置换:
f=123456
145326根据上面的置换,将原有矩阵中的字母按照第1列、第4列、第5列、第3列、第2列、第6列的顺序排列、则有下面的形式:
a a c t t k b i n g e s a i v f t e
从而得到密文:abatgftetcnvaiikse
其解密的过程是根据密钥的字母数作为列数,将密文按照列、行的顾序写出,再根据由密钥给出的矩阵置换产生新的矩阵,从而恢复明文。
三、实验环境
运行Windows操作系统的PC机, C++(Windows)或 C-Free 3.5等C语言编译环境。
四、实验内容和步骤
(1)根据实验原理部分对替代密码算法的介绍,自己创建明文信息,并选择一个密钥,编写替代密码算法的实现程序,实现加密和解密操作。
(2)根据实验原理部分对置换密码算法的介绍,自己创建明文信息,并选择一个密钥,编写置换密码算法
替代加密算法(恺撒密码)(循环移位密码)
程序:
#include int k; char m; int n; char c; char p; cout<<\"请输入明文: \";cin>>p; n=p; cout<<\"请输入密钥: \";cin>>k; m=n+k; cout<<\"密文是: \"< cout<<\"明文是: \"< 置换密码(换位密码) 程序:#include void main() { int a,b; cout<<\"请输入密钥a: \";cin>>a; cout<<\"请输入密钥b: \";cin>>b; char p[3]; int q[3]; char c[3]; cout<<\"请输入明文: \"; cin>>p; for(int i=0;i<3;i++) { q[i]=(int)p[i]; q[i]=(a*(q[i]-97)+b)%26; c[i]=(char)(q[i]+97); cout< while(a*f%26!=1) { f++; } cout<<\"请输入密文: \"; cin>>c; for(int i=0;i<3;i++) { q[i]=(int)c[i]; if((q[i]-97-b)<0) { q[i]=((f*(q[i]-97-b))+26*9999)%26; } else { q[i]=(f*q[i]-97-b)%26; } p[i]=(char)(q[i]+97); cout< cout< 实验3-2 对称密码算法DES 一、实验目的 理解对称加密算法的原理和特点,通过用DES算法对实际的数据进行加密和解密来理解DES算法的加密原理及运行原理。 二、实验原理 对称密钥机制即对称密钥体系,也称为单钥密码体系和传统密码体系。对称密码体系通常分为两大类,一类是分组密码(如DES、AES算法),另一类是序列密码(如RC4算法)。 对称密码体系加密和解密时所用的密钥是相同的或者是类似的,即由加密密钥可以很容易地推导出解密密钥,反之亦然。同时在一个密码系统中,我们不能假定加密算法和解密算法是保密的,因此密钥必须保密。发送信息的通道往往是不可靠的或者不安全的,所以在对称密码系统中,必须用不同于发送信息的另外一个安全信道来发送密钥。 对称密码体系的优点: 1. 加密效率高,硬件实现可达每秒数百兆字节(件实现略慢一些)。 2. 密钥相对较短。 3. 可以用来构造各种密钥机制。 4. 可以用来建造安全性更强的密码。 对称密码体系的缺点: 1. 通信双方都要保持密钥的秘密性。 2. 在大型网络中,每个人需持有许多密钥。 3. 为了安全,需要经常更换密钥。 二、实验原理 信息加密根据采用的密钥类型可以划分为对称密码算法和非对称密码算法。对称密码算法是指加密系统的加密密钥和解密密钥相同,或者虽然不同,但是可以从其中任意一个推导出另一个,更形象的说就是用同一把钥匙开锁和解锁。在对称密码算法的发展历史中曾出现过多种优秀的算法,包括DES、3DES、AES等。下面我们以DES算法为例介绍对称密码算法的实现机制。 DES算法是由美国IBM公司在20世纪70年代提出,并被美国政府、美国国家标准局和美国国家标准协会采纳和承认的一种标准加密算法。它属于分组加密算法,即在明文加密和密文解密过程中,信息都是按照固定长度分组后进行处理的。混淆和扩散是它采用的两个最重要的安全特性。混淆是指通过密码算法使明文和密文以及密钥的关系非常复杂,无法从数学上描述或者统计。扩散是指明文和密钥中每一位信息的变动, 都会影响到密文中许多位信息的变动,从而隐藏统计上的特性,增加密码的安全。 DES算法将明文分成64位大小的众多数据块,即分组长度为64位。同时用56位密钥对64位明文信息加密,最终形成64位的密文。如果明文长度下足64位,则将其扩展为64位(如补零等方法)。具体加密过程首先是将输入的数据进行初始换位(IP),即将明文M中数据的排例顺序按一定的规则重新排列,生成新的数据序列,以打乱原来的次序。然后将变换后的数据平分成左右两部分,左边记为L0,右边记为R0,然后对R0实行在子密钥(由加密密钥产生)控制下的变换f,结果记为f(Ro,K1),再与L0做逐位异或运算,其结果记为R1,R0则作为下一轮的L1。如此循环16轮,最后得到L16、R16,再对L16、,R16实行逆初始置换IP-1,即可得到加密数据。解密过程与此类似,不同之处仅在于子密钥的使用顺序正好相反。 DES的加密算法包括3个基本函数。 1. 初始换位(IP) 它的作用是把输入的64位数据块的排列顺序打乱,每位数据按照下面换位规则重新组合,即将第58位换到第1位,第50位换到第2位,……,依次类推。重组后的64位输出分为L0、R0(左、右)两部分,每部分分别为32位。 58,50,42,34,26,18,10,2,60,52.44,36,28,20,12,4 62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8 57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3 61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7 R0和K1经过f(Ro,K1)变换后的输出结果,再和L0进行异或运算,输出结果做为R1,R0则赋给L1。L1和R1同样再做类似运算生成L2和R2,……,经过16次运算后生成L16和R16。 2.f函数 f函数是多个置换函数和替代函数的组合函数,它将32位比特的输入变换为32位的输出。Ri经过扩展运算E变换后扩展为48位的E(Ri),与Ki+1进行异或运算后输出的结果分成8组,每组6比特的并联B,B=B1B2B3B4B5B6B7B8,再经过8个S盒的选择压缩运算转换为4位,8个4位合并为32位后再经过P变换输出为32位的f(Ri,Ki+1)。其中,扩展运算E与置换P主要作用是增加算法的扩散效果。 3.逆初始量换函数IP-1 它将L16和R16作为输入,进行逆初始换位得到密文输出。逆初始换位是初始换位的逆运算,换位规则如下所列: 40, 8,48,16,56,24,64,32,39,7,47,15,55,25,63,31 38,6,46,14,54,22,62,30,37,5,45,13.53.21,61,29 36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27 34,2,42,10,50,18,58,26,33,1,41,9,49,1?,57,25 DES的加密算法中除了上面介绍的3个基本函数,还有一个非常重要的功能模块,子密钥的生成模块。 输入的初始密钥值为64位,但DES算法规定,其中第8、16、……、64位是奇偶校验位,不参与DES运算。所以,实际可用位数只有56位,经过缩小选择换位表1(表l—2)即密钥置换PC-1的变换后,初始密钥的位数由64位变成了56位,将其平分为两部分C0、D0,然后分别进行第1次循环左移,得到C1、 D1,将C1(28位)、D1(28位)合并后得到56位的输出结果,再经过缩小选择换位表2(表1—3)即密钥置换PC-2,从而得到了密钥K1(48位)。依次类推,便可得到K2、……、K16需要注意的是,16次循环左移对应的左移位数要依据表1-1的规则进行。 表1—1 左移位数规则 i LSi 1 1 2 1 3 2 4 2 5 2 6 2 7 2 8 2 9 1 10 2 11 2 12 2 13 2 14 2 15 2 16 1 表1—2缩小选择换位表1 57 1 10 19 63 7 14 21 49 58 2 11 55 62 6 13 41 50 59 3 47 54 61 5 33 42 51 60 39 46 53 28 25 34 43 52 31 38 45 20 表1—3缩小选择换位表2 17 26 35 44 23 30 37 12 9 18 27 36 15 22 29 4 14 3 23 16 41 30 44 46 17 28 19 7 52 40 49 42 11 15 12 27 31 51 39 50 24 6 4 20 37 45 56 36 1 21 26 13 47 33 34 29 5 10 8 2 55 48 53 32 三、实验环境 运行Windows操作系统的PC机, C++(Windows)或 C-Free 3.5等C语言编译环境。 四、实验内容和步骤 #include \"des.h\" int main(int argc,char*argv[]) { unsigned char pt[9]=\"luping\"; unsigned char ct[9]; unsigned char key[8]={'a','b','c','d','a','b','c','d'}; des_key skey; printf(\"明文:%s\\n\ printf(\"密钥:\"); for(int i=0;i<8;i++) printf(\"%c\ printf(\"\\n\"); pt[9]=ct[9]='\\0'; des_setup(key,8,0,&skey); des_ecb_encrypt(pt,ct,&skey); printf(\"密文:%x\\n\ memset(pt,0,9); des_ecb_decrypt(ct,pt,&skey); printf(\"解密结果:%s\\n\ system(\"PAUSE\"); return 0; } 实验总结: 经过本次实验,我理解了对称加密算法的原理和特点,实验中更是通过用DES算法对实际的数据进行加密和解密来理解DES算法的加密原理及运行原理。实验过程中一开始打字打错导致实验错误,后来纠正就正常了。 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- jqkq.cn 版权所有 赣ICP备2024042794号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务