密码学基础实验指导书.doc
《密码学基础实验指导书.doc》由会员分享,可在线阅读,更多相关《密码学基础实验指导书.doc(26页珍藏版)》请在三一办公上搜索。
1、五邑大学本科生实验指导书密码学基础实验指导书课程名称:密码学基础课程编号:课程性质:专业选修课课程总学时:48实验总学时:8任课教师:高伟峰一、实验教学目的和基本要求密码学基础是计算科学与技术本科专业开设的一门专业选修课,本课程的主要目标是让学生学习和了解密码学的一些基本概念,理解和掌握一些常用密码算法,包括加密和解密、认证理论及算法、安全计算原理及算法,学会进行效率分析和安全性分析。密码学是信息安全的核心技术,是实现安全通信的基础,所以实验和理论一样都很重要,实验能够让学生通过多个密码算法的程序设计实现,更好地掌握密码算法设计的机理和方法,熟悉网络攻击和防范方法。同时,基于密码系统设计的基本
2、方法和基本步骤,帮助学生理解密码学在信息安全中的地位,并引导了解密码学领域及信息安全领域的新进展、新方向。具体要求如下:1要求学生在上机前对本次实验的原理、内容、方案进行充分准备。2每次实验必须按要求的格式撰写实验报告,内容大体包括:实验目的、实验内容、实验及算法原理、程序清单、结果分析、总结。3实验成绩作为平时成绩的一部分。二、实验内容及学时分配 实验一 古典密码学实验(2学时)一、实验目的 通过实现简单的古典密码算法,理解密码学的相关概念如明文(plaintext)、密文(ciphertext)、加密密钥(encryption key)、解密密钥(decryption key)、加密算法(
3、encryption algorithm)、解密算法(decryption algorithm)等。二、实验内容 1)用CC+语言实现仿射变换(Affine)加/解密算法;2)用CC+语言实现统计26个英文字母出现的频率的程序;3)利用仿射变换加/解密程序对一段较长的英文文章进行加密,再利用统计软件对明文和密文中字母出现的频率进行统计并作对比,观察有什么规律。 放射变换:加密:解密:其中a, b为密钥,且gcd(a, 26)=1实验要求:加/解密程序对任意满足条件的a、b都能够处理。三、实验步骤(1)统计26个英文字母出现的频率的程序#include#include#includeusing
4、namespace std;void main() ifstream in(a.txt); vector s; vector n(26,0); for(int i=0;ix; ) for(int i=0;i26;+i) if(int(x)=si) ni+; float sum=0.0; for(int j=0;j26;+j) sum+=nj; cout统计结果如下:endl; for(int k=0;k26;+k)/ nk=nk/sum; cout char(k+97)出现的概率为:nk/sumendl; /coutnkendl; (2)仿射变换加/解密程序对一段较长的英文文章进行加密#inc
5、lude #include#include#includeusing namespace std;/判断两个数是不是互素(辗转相除)/bool gcd(int a)int f=26,g,r;g=a;dor=f%g;f=g;g=r;while(r);if(f=1)return 1;elsereturn 0;/求逆/int inv(int a)int x,i;for(i=1;i=30;+i)if(26*i+1)%a=0)x=(26*i+1)/a;break;return x;/void main()cout请你选择操作密码的方式:endl 0-表示加密 endl 1-表示解密 z;if(z=0|z
6、=1) /cout请输入密钥a和b:ab;if(a25)|(b25)couta,b的输入范围有错!endl;elseif(gcd(a)=0)cout密钥a有误,与26不互素endl;elseif(z=0)/加密算法 ifstream in(a.txt); ofstream out(b.txt); vector s; for(char x;inx; ) s.push_back(int(x); for(int i=0;is.size();+i) si=(a*(si-97)+b)%26; outchar(si+97); coutendl; cout加密成功!明文请见b.txtendl; else/解
7、密算法ifstream in(b.txt); ofstream out(a.txt); vector s; for(char x;inx; ) s.push_back(int(x); for(int i=0;is.size();+i) si=inv(a)*(si-97-b+26)%26; outchar(si+97);outendl;cout解密成功!密文请见a.txtendl;/elsecout所选操作无效!endl;四、实验结果及分析该程序是对文件进行操作,结果如下:(1) 统计26个英文字母出现的频率的程序(2) 仿射变换加/解密程序对一段较长的英文文章进行加密下面是文本内容:实验二 A
8、ES密码的实现(4学时)一、实验目的 通过实现AES密码算法,理解对称密码机制。二、实验内容 1)在深入理解AES加密/解密算法理论的基础上,设计一个AES加密/解密软件系统;2)完成一个明文分组的加解密,明文和密钥是十六进制,长度都为64比特(16个16进制数),输入明文和密钥,输出密文,进行加密后,能够进行正确的解密;3) 程序运行时,要求输出每一轮使用的密钥,以及每一轮加密或解密之后的16进制表示的值;4) 要求提供所设计系统的报告及完整的软件。三、实验步骤1.字节替换SubBytes()变换是一个基于S盒的非线性置换,它用于将输入或中间态的每一个字节通过一个简单的查表操作,将其映射为另
9、一个字节。映射方法是把输入字节的高四位作为S盒的行值,低四位作为列值,然后取出S盒中对应的行和列的元素作为输出。unsigned char subbytes(unsigned char state44) printf(after subbyte:n); /取出中间态state映射到S盒中的值赋给中间态statefor(i=0;i4;i+)for(j=0;j4;j+)stateij=sboxstateij; for(i=0;i4;i+) /输出到屏幕显示statefor(j=0;j4;j+)printf(tt%02x ,stateij); printf(n);printf(n); return
10、0; 2行移位ShiftRows()完成基于行的循环移位操作,变换方法是第0行不动,第一行循环左移一个字节,第二位循环左移两个字节,第三行循环左移三个字节。unsigned char shiftrows(unsigned char state44) printf(after shiftrows:n); / 在中间态的行上, k=state10; / 第0行不变 state10=state11; / 第一行循环左移一个字节 state11=state12; / 第二行循环左移两个字节 state12=state13; / 第三行循环左移三个字节 state13=k; k=state20; sta
11、te20=state22; state22=k; k=state21; state21=state23; state23=k; k=state30; state30=state33; state33=state32; state32=state31; state31=k; for(i=0;i4;i+) /输出到屏幕显示statefor(j=0;j4;j+)printf(tt%02x ,stateij); printf(n); printf(n); return 0; 3列混合MixColumns()实现逐列混合,方法是s(x)=c(x)*s(x)mod(x4+1)unsigned char m
12、ixcolumns(unsigned char state44) printf(after mixcolumns:n);/ 实现 (02 03 01 01) 与中间态state分别相乘后异或得相应值for(i=0;i4;i+) / (01 02 03 01) / (01 01 02 03) k=state0i; / (03 01 01 02) temp0 = state0i state1i state2i state3i ; temp1 = state0i state1i ; temp1 = xtime(temp1); state0i = temp1 temp0 ; temp1 = state
13、1i state2i ; temp1 = xtime(temp1); state1i = temp1 temp0 ; temp1 = state2i state3i ; temp1 = xtime(temp1); state2i = temp1 temp0 ; temp1 = state3i k ; temp1 = xtime(temp1); state3i = temp1 temp0 ; for(i=0;i4;i+) /输出到屏幕显示statefor(j=0;j4;j+)printf(tt%02x ,stateij); printf(n); printf(n);return 0;4轮密钥加A
14、ddRoundKey()用于将输入或中间态S的每一列与一个密钥字ki进行按位异或,每一个轮密钥由Nb个字组成。unsigned char addroundkey(unsigned char state44,unsigned char w44)printf(addroundkey %d:n,round+); /将中间态state中的每一列与一个密钥字(w44中的一列)进行按位异或for(i=0;i4;i+) /完了又赋值给statefor(j=0;j4;j+)stateij=wij;for(i=0;i4;i+) /输出到屏幕显示出来statefor(j=0;j4;j+)printf(tt%02x
15、 ,stateij);printf(n);printf(n); return 0; 5密钥扩展 通过生成器产生Nr+1个轮密钥,每个轮密钥由Nb个字组成,共有Nb(Nr+1)个字。在加密过程中,需要Nr+1个轮密钥,需要构造4(Nr+1)个32位字。首先将输入的4个字节直接复制到扩展密钥数组的前4个字中,得到W0,W1,W2,W3;然后每次用4个字填充扩展密钥数余下的部分。/keyexpand printf(after keyexpand:n);for(i=4;i8;i+) if(i%4=0) rotword0=w1i-1; rotword1=w2i-1; rotword2=w3i-1; ro
16、tword3=w0i-1; printf(rotword():); for(j=0;j4;j+) printf(%02x ,rotwordj); for(j=0;j4;j+) subwordj=sboxrotwordj; printf(nsubword():); for(j=0;j4;j+) printf(%02x ,subwordj); printf(nn); for(j=0;j4;j+) rconj=subwordj RconNj ; printf(after Rcon():); for(j=0;j4;j+) printf(%02x ,rconj); printf(nn);for(j=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 密码学 基础 实验 指导书
链接地址:https://www.31ppt.com/p-4193006.html