实现DES-分组密码算法的加解密

上传人:m**** 文档编号:558666390 上传时间:2023-03-05 格式:DOC 页数:9 大小:68.50KB
返回 下载 相关 举报
实现DES-分组密码算法的加解密_第1页
第1页 / 共9页
实现DES-分组密码算法的加解密_第2页
第2页 / 共9页
实现DES-分组密码算法的加解密_第3页
第3页 / 共9页
实现DES-分组密码算法的加解密_第4页
第4页 / 共9页
实现DES-分组密码算法的加解密_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《实现DES-分组密码算法的加解密》由会员分享,可在线阅读,更多相关《实现DES-分组密码算法的加解密(9页珍藏版)》请在金锄头文库上搜索。

1、实 验 报 告课程:密码学 班级: 姓名: 学号:成绩: 指导教师: 实验日期:2011/5/25实验密级: 预习程度: 实验时间:12:50-15:20仪器组次: 18 必修/选修:必修 实验序号:4实验名称: 实现DES 分组密码算法的加解密 实验目的与要求:1、掌握DES 分组密码算法的软件实现方法;2、复习DES 分组密码算法设计的基本原理;3、能用DES 分组密码算法实现已知明文的加解密 实验仪器:名称型号数量计算机Lenovo1一、 实验要求1、求主密钥的扩展密钥前,先输出使用的PC-1 置换和PC-2 置换;2、对明/密文文件用DES 算法进行加/解密前,先输出确定使用的S 盒和

2、有关置换表;3、“确定主密钥的扩展密钥”和“对明/密文文件的加/解密”分别编写两个模块,如果时间不够,可以任选一个模块;4、确定扩展密钥前,先指出是加密密钥还是解密密钥;5、密钥扩展的移位的位数可以先添表,但最后一轮移位完后,必须回到初始值c0d0。6、主密钥长度与明文相一致,需要忽略校验位;7、能完成任意给定的一个明/密文文件的加/解密;8、加解密结果正确。二、实验内容与步骤下面是程序的部分代码int main() char MingWen104; char target8; char InputKey8; int text64; int text_ip64; int L032,Li32;

3、int R032,Ri32;int RE048; int key64; int keyPC156; int A28; int B28;int keyAB56; int K1648; int RK48; int RKS8; int SP32; int RKSP32; int text_end64; int text_out1464; char init9=HTmadeit; int CBC64;int result1364;int H208;char MiWen208;int C832;int M138;char choice;int t;int i,j;int k,l,m,n;int r8,c

4、8;int flag=1;printf(欢迎使用DES加密解密nn);while(flag)printf(A加密,B解密,请选择:n);scanf(%c,&choice);while(choice!=A&choice!=B&choice!=a&choice!=b)printf(对不起,您的输入不合法。请选择A或B,A表示加密,B表示解密。n); scanf(%c,&choice);getchar(); printf(请输入8位密钥:n);gets(InputKey);while(InputKey7=0|InputKey8!=0) printf(您输入的密钥位数有误,请重新输入8位密钥:n);

5、gets(InputKey);for(i=0;i8;i+) int a8=0,0,0,0,0,0,0,0; m=InputKeyi; for(j=0;m!=0;j+) aj=m%2; m=m/2; for(j=0;j8;j+) key(i*8)+j=a7-j;for(i=0;i56;i+) keyPC1i=keyPC1i-1; for(i=0;i28;i+) Ai=keyPC1i; Bi=keyPC1i+28; for(t=0;t16;t+) if(movet=1) n=A0; for(i=0;i27;i+) Ai=Ai+1; A27=n; n=B0; for(i=0;i28;i+) else

6、 for(i=0;i8;i+) targeti=MingWeni+(8*l); for(i=0;i8;i+) int a8=0,0,0,0,0,0,0,0; m=targeti; for(j=0;m!=0;j+) aj=m%2; m=m/2; for(j=0;j8;j+) text(i*8)+j=a7-j; /for(i=0;i64;i+) /printf(%d,texti); /printf(n); /for(i=0;i64;i+) /printf(%d,text_outli); /printf(n); for(i=0;i64;i+) /CBC模式下前一分组的密文异或当前分组 texti=t

7、ext_outlitexti; /for(i=0;i64;i+) /printf(%d,texti); /printf(n); /对每个text进行DES加密 for(i=0;i64;i+) /进行初始换位 text_ipi=textIPi-1; for(i=0;i32;i+) /分成左右两部分,各32位 L0i=text_ipi; R0i=text_ipi+32; /for(i=0;i32;i+) / printf(%d,L0i); /for(i=0;i32;i+) / printf(%d,R0i); /十六次迭代 for(t=0;t16;t+) for(i=0;i48;i+) /将右半部分

8、通过扩展换位表E从32位扩展成48位 RE0i=R0Ei-1; /printf(RE0n); /for(i=0;i48;i+) /printf(%d,RE0i); for(i=0;i48;i+) /RE与K异或运算 RKi=RE0iKti; /printf(n); /for(i=0;i48;i+) /printf(%d,RKi); for(i=0;i8;i+) /将R和K异或运算的结果通过S位移表 ri=RK(i*6)+0*2+RK(i*6)+5; ci=RK(i*6)+1*8+RK(i*6)+2*4+RK(i*6)+3*2+RK(i*6)+4; RKS0=S1r0c0; RKS1=S2r1c

9、1; RKS2=S3r2c2; RKS3=S4r3c3; RKS4=S5r4c4; RKS5=S6r5c5; RKS6=S7r6c6; RKS7=S8r7c7; for(i=0;i8;i+) /把结果转成32位二进制储存在数组SP中 int b4=0,0,0,0; m=RKSi; for(j=3;m!=0;j-) bj=m%2; m=m/2; for(j=0;j4;j+) SPj+(i*4)=bj; for(i=0;i32;i+) /将二进制结果再经过一个P盒换位 RKSPi=SPPi-1; for(i=0;i32;i+) /与前一次的左部异或运算,得到本次迭代的右部 Rii=L0iRKSPi; for(i=0;i32;i+) L0i=R0i; R0i=Rii; else if(choice=B|choice=b) printf(请输入密文内容:n); gets(MiWen); for(i=0;i208;i+) Hi=0; for(i=0;MiWeni!=0;i+)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 小学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号