1 / 13
文档名称:

DES 加密解密算法的C 实现--实验报告.doc

格式:doc   大小:190KB   页数:13页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

DES 加密解密算法的C 实现--实验报告.doc

上传人:q1188830 2017/7/13 文件大小:190 KB

下载得到文件列表

DES 加密解密算法的C 实现--实验报告.doc

文档介绍

文档介绍:1 
 
实验一 
1、实验题目 
  
利用C/C++编程实现DES加密算法或MD5加密算法。我选择的是用C++语言实现
 
DES的加密算法。 
2、实验目的 
  
通过编码实现DES算法或MD5算法,深入掌握算法的加密原理,理解其实际应用 
价值,同时要求用C/C++语言实现该算法,让我们从底层开始熟悉该算法的实现过程 
3、实验环境 
操作系统:WIN7旗舰版 
开发工具:Visual Studio 2010旗舰版 开发语言:C++ 
4、实验原理 
 
 
DES加密流程
2 
 
 如上图所示为DES的加密流程,其中主要包含初始置换,压缩换位1,压缩换位2,扩
展置换,S盒置换,异或运算、终结置换等过程。  Ÿ 初始置换是按照初始置换表将64位明文重新排列次序  Ÿ 扩展置换是将原32为数据扩展为48位数据,它主要由三个目的:   1、产生与子密钥相同的长度   2、提供更长的结果,使其在加密过程中可以被压缩   
3、产生雪崩效应,使得输入的一位将影响两个替换 
 Ÿ S盒置换是DES算法中最核心的内容,在DES中,只有S盒置换是非线性的,它比DES   中其他任何一步都提供更好的安全性 
 Ÿ 终结置换与初始置换相对应,它们都不影响DES的安全性,主要目的是为了更容易将   明文与密文数据一字节大小放入DES的f算法中 
 
DES解密流程与加密流程基本相同,只不过在进行16轮迭代元算时,将子密钥生成的
K的次序倒过来进行迭代运算 
5、实验过程记录 
 
在对DES算法有了清晰的认识后,编码过程中我将其分为几个关键部分分别进行编码,最后将整个过程按顺序执行,即可完成DES的加密,代码的主要几个函数如下: 
//Byte转为Bit 
ByteToBit(ElemType ch,ElemType bit[8])     //Bit转为Byte 
BitToByte(ElemType bit[8],ElemType &ch)  //初始置换 
InitialEX(ElemType Inorder[64],ElemType Disorder[64]) //终结置换 
AntiEx(ElemType Disorder[64]) //扩展置换 
ExpandEX(ElemType RightMsg[32],ElemType ExpandMsg[48]) //16轮迭代加密 
MoveLeft(ElemType C[28],ElemType D[28],ElemType L0[32],ElemType R0[32])  
3 
 
//16轮迭代解密 
mMoveLeft(ElemType C[28],ElemType D[28],ElemType L0[32],ElemType R0[32]) 
//生成48位子密钥 
GetCD48(ElemType C[28],ElemType D[28],ElemType Secret[48]) //48位明文与子密钥进行异或运算 
XOR(ElemType ExpandMsg[48],ElemType Secret[48],ElemType Result[48]) //S盒四位输出 
getSOut(ElemType Result[48],ElemType Sout[32]) //直接置换 
DirExchange(ElemType Sout[32],ElemType DirOut[32]) //Li与Ri进行抑或运算 
XORLR(ElemType DirOut[32],ElemType Left[32],ElemType Result[32])  
函数执行次序和调用关系关系如下: 
 
 

 
 
 
//  : 定义控制台应用程序的入口点。 //  
#include "" #include "" #include <iostream> #include<bitset> #include<string> using namespace std;  
 
//置换矩阵 
int IP_EX[64]= {  58, 50, 42, 34, 26, 18, 10,  2,  60, 52, 44, 36, 28, 20, 12,  4,  62, 54,&#160