最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

DES加密解密课程设计报告

来源:动视网 责编:小OO 时间:2025-09-29 23:23:08
文档

DES加密解密课程设计报告

成都信息工程学院课程设计报告DES算法加密与解密的设计与实现课程名称:密码算法程序设计学生姓名:学生学号:专业班级:任课教师:XX年XX月XX日指导老师评阅成绩表学习与工作态度(30%)选题意义(10%)研究水平与设计能力(25%)课程设计说明说(论文)撰写质量(25%)设计创新(10%)总分指导老师签名:年月日课程设计答辩记录及评价表学生讲述情况教师主要提问记录学生回答问题情况答辩评分评分项目分值评价参考标准评分总分优良中及格差选题意义10987研究水平与设计能力252320181510
推荐度:
导读成都信息工程学院课程设计报告DES算法加密与解密的设计与实现课程名称:密码算法程序设计学生姓名:学生学号:专业班级:任课教师:XX年XX月XX日指导老师评阅成绩表学习与工作态度(30%)选题意义(10%)研究水平与设计能力(25%)课程设计说明说(论文)撰写质量(25%)设计创新(10%)总分指导老师签名:年月日课程设计答辩记录及评价表学生讲述情况教师主要提问记录学生回答问题情况答辩评分评分项目分值评价参考标准评分总分优良中及格差选题意义10987研究水平与设计能力252320181510
成都信息工程学院

课程设计报告

DES算法加密与解密的设计与实现

课程名称:  密码算法程序设计   

学生姓名:                           

学生学号:                          

专业班级:                         

任课教师:                         

XX年  XX 月 XX   日

指导老师评阅成绩表
学习与工作态度(30%)选题意义(10%)研究水平与设计能力(25%)课程设计说明说(论文)撰写质量(25%)

设计创新(10%)总分
指导老师签名:                                                     年   月   日
课程设计答辩记录及评价表
学生

讲述情况

教师主要

提问记录

学生回答

问题情况

答辩评分评分项目分值评价参考标准评分总分
及格
选题意义1098764
研究水平与设计能力252320181510
课程设计说明书(论文)撰写质量252320181510
设计创新1098764
答辩效果302825221915
答辩小组成员签名
答辩小组组长签名:                                                     年    月    日
课程设计成绩评定表
成绩汇总评分项目评分比例分数课程设计总分
指导老师评分50%
答辩小组评分50%
1背景

1.1 DES算法概述

DES(Data Encryption Standard)是由美国IBM公司于20世纪70年代中期的一个密码算(LUCIFER)发展而来,在1977年1月15日,美国国家标准局正式公布实施,并得到了ISO的认可,在过去的20多年时间里,DES被广泛应用于美国联邦和各种商业信息的保密工作中,经受住了各种密码分析和攻击,有很好的安全性。然而,目前DES算法已经被更为安全的Rijndael算法取代,但是DES加密算法还没有被彻底的破解掉,仍是目前使用最为普遍的对称密码算法。所以对DES的研究还有很大价值,在国内DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键的数据保密,如信用卡持卡人的PIN码加密传输,IC卡与POS机之间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。

DES算法是一种采用传统的代替和置换操作加密的分组密码,明文以比特为分组,密钥长度为比特,有效密钥长度是56比特,其中加密密钥有8比特是奇偶校验,DES的加密和解密用的是同一算法,它的安全性依赖于所用的密钥。它首先把需要加密的明文划分为每比特的二进制的数据块,用56比特有效密钥对比特二进制数据块进行加密,每次加密可对比特的明文输入进行16轮的替换和移位后,输出完全不同的比特密文数据。由于DES算法仅使用最大为比特的标准算法和逻辑运算,运算速度快,密钥容易产生,适合于在大多数计算机上用软件快速实现,同样也适合于在专用芯片上实现。

1.2 DES算法描述

    DES算法的加密过程首先对明文分组进行操作,需要加密的明文分组固定为比特的块。图1-1是DES加密算法的加密流程。图1-2是密钥扩展处理过程。

     图1-1DES加密算法流程

       图1-2子密钥产生流程

2系统设计

2.1系统主要目标

(1)用C++设计一个DES加密/解密软件系统;

(2)完成一个明文分组的加解密,明文和密钥是ASCII码,长度都为8个字符,输入明文和密钥,输出密文,进行加密后,能够进行正确的解密;

(3)程序运行时,要求输出第15、16轮的密钥,以及第15、16轮加密或解密之后的值,16进制表示;

(4)程序有良好的人机交互操作;

(5)要求从两个文件分别读取明文和密钥,并在程序中输出明文及密钥;

(6)要求提供所设计系统的报告及完整的软件。

2.2系统运行环境

本软件用C语言编写,编写时所用的工具主要是Microsoft Visual C++6.0。编辑成功后的.EXE文件可以在装有windows系统的任何计算机上使用。

测试平台:Windows 7旗舰版

使用软件:Microsoft Visual C++6.0

3功能需求分析

3.1整体功能分析

3.2 DES算的功能分析

4模块划分

4.1 初始置换

    首先输入比特的明文块,按照初始置换(IP)表进行置换,DES初始置换表如图3-1所示。

       图4-1 初始置换表

4.2 轮结构

经过DES算法第一阶段的初始置换得到的比特块分为两部分,前32位为左半部分,后32位为右半部分,如上面图3-2所示,DES算法的论结构分为左右两部分32比特在每一轮中被处理。具体过程为:下一轮左半部分32比特等于上一轮右半部分32比特;而下一轮右半部分的32比特的计算则是由上一轮右半部分和轮密钥输入到F函数中进行变换,变换结果与上一轮左半部分进行异或运算,得到。因此每一轮的变换可由下面公式表示:

       

       

4.2.1 E盒扩充变换

 将右半部分的32比特,进行E盒扩展,扩展成为48比特。具体变换过程为把输入的32比特按照8行4列方式依次排列,形成一个8*4矩阵,然后E盒扩展之后输出8*6矩阵。

     

       图4-2 E盒扩展

4.2.2 S盒压缩变换

 将E盒的输出与子密钥进行异或得到的48比特作为S盒的输入,进入S盒变换,48比特压缩为32比特。S盒的安全性能是保证DES算法安全性的源泉,DES算法共有8个不同的S盒,每个S盒接受6位输入,输出4位。8个S盒如下:

4.2.3 P盒置换

 盒输出的32比特经过P盒置换,重新编排32比特的位置。下图为P盒置换过程。

 

       图4-3P盒置换

4.3 逆初始置换

 算法进行完16轮运算之后,需要进行逆初始置换,逆初始置换正好为初始置换的逆,如一个矩阵进行初始置换之后输出,在进行依次逆初始置换的输出结果为初始矩阵。

5程序分模块实现

5.1将字符串转换成二进制流

用ToBin()函数把输入的明文、密钥、密文转换为二进制流,其中p是输入的字符串,b是转换后的二进制流。

v{

     int j=0x80;

     for(;j;j>>=1)  

     {

      if(j&p[i]) 

      {

       b[k++]=1;     

      }

      else   

      {

       b[k++]=0;   

      }

     }

}

5.2子密钥的产生

子密钥产生函数:SubKey(),其中参数K0为输入的密钥。用到Replacement()函数,此函数实现密钥PC_1置换,和PC_2置换。Lif_move()函数实现每一轮的左移位功能。

void SubKey(int K0[])   子密钥产生函数

{

  密钥置换PC_1

   将PC_1输出的56比特分为左右两部分

     C[0][i]=K1[i];

     D[0][i]=K1[i+28];

     int j;

     lif_move(C[i],C[i+1],move_times[i]);

     lif_move(D[i],D[i+1],move_times[i]);

     for(j=0;j<28;j++)

     {

      K2[j]=C[i+1][j];

      K2[j+28]=D[i+1][j];

     }

     Replacement(K2,PC_2,K[i],48);  密钥置换PC_2

     i++;

}

5.3F函数的计算

 函数为加密做准备,其中的Replacement()实现E盒扩展,P盒置换。S_compress()函数实现S盒的压缩变化。

void F_Function(int a[32],int b[32],int n)  函数

{

     tmp[i]=tmp[i]^K[n][i];

}

5.4 16轮加密的实现

Encryption()函数实现16轮加密,其中F_Function()函数即为F函数。

void Encryption(int m0[],int c1[])

{

 初始置换IP

     L[0][i]=m1[i];

     R[0][i]=m1[i+32];

     F_Function(R[k-1],arry,k-1);

     for(i=0;i<32;i++)

     {

      L[k][i]=R[k-1][i];

      R[k][i]=L[k-1][i]^arry[i];

     }

     k++;

     c0[i]=R[16][i];

     c0[i+32]=L[16][i];

 逆初始置换

}

5.5把二进制转换为10进制

转换为十进制是为输出16进制做准备,To10()函数把每四个字节转换成一个10进制数。

5.6解密的实现

解密函数Decryption(),解密过程中先有change()函数把密钥互换,然后用和加密相同的算法则可正确解密。

5.7程序运行界面预览

可根据需要选择加密和解密,加密又可选择直接输入明文和密钥或是从文件读取明文和密钥。

6测试报告

测试明文:12345678

测试密钥:12345678

6.1程序总体运行情况

加密情况:

6.2密钥中间过程

16轮子密钥如下:

子密钥生成过程中的值:

经过测试这些函数,能够得到正确的16轮密钥

6.3加密过程的中间结果

初始二进制明文和密钥:

初始IP:

第一轮E盒扩展结果:

第一轮S盒输出:

第一轮P盒置换结果:

IP逆置换:

 经过对个函数的测试,能正确加密。

6.4解密过程的中间结果

解密的密钥还是加密时的密钥,得到16轮子密后,将顺序全部颠倒一下。因为解密过程与加密过相返。

 准备解密的密文:

初始IP:

第一次E盒扩展:

第一次S盒压缩:

第一次P盒置换:

解密后的二进制结果:

经过对个函数的测试,能正确加密。

7课程报告总结

通过这次程序设计,我学到了很多东西,首先更深入的理解了DES算法,不仅完完全全弄懂了DES算法的各个过程,像密钥产生过程中的左移位、S盒的压缩变换等,也能一一实现。其次也提高了编程技巧,在处理一些问题时能选择较佳的方法。

因为在做这个软件的时候看了很多别人的代码,所以我还是学到了不少东西,我看到别人的封装更好,代码也整洁,使用一些更好的实现方法。再看我代码,我就感觉我的代码重用率很差。还有一些编程方面的习惯也不太好。通过此次实践我发现很多不足,以后还要去弥补这些不足。

参考文献:

[1]  谭浩强 C程序设计(第三版) 清华大学出版社 2009

[2] 张世斌 万武南 张金全 孙宣东 现代密码学 西安电子科技大学出版社 2009

文档

DES加密解密课程设计报告

成都信息工程学院课程设计报告DES算法加密与解密的设计与实现课程名称:密码算法程序设计学生姓名:学生学号:专业班级:任课教师:XX年XX月XX日指导老师评阅成绩表学习与工作态度(30%)选题意义(10%)研究水平与设计能力(25%)课程设计说明说(论文)撰写质量(25%)设计创新(10%)总分指导老师签名:年月日课程设计答辩记录及评价表学生讲述情况教师主要提问记录学生回答问题情况答辩评分评分项目分值评价参考标准评分总分优良中及格差选题意义10987研究水平与设计能力252320181510
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top