- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DES_加密解密算法的C实现--实验报告讲述
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])??
函数执行次序和调用关系关系如下:?
?
?
6.源代码
?
?
?
//?DES.cpp?:?定义控制台应用程序的入口点。?//??
#include?stdafx.h?#include?function.h?#include?iostream?#includebitset?#includestring?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,?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?
};?
?
文档评论(0)