DESD算法的调试.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DESD算法的调试

考查题目: DESD算法的调试 1.考核目的 考核对信息安全掌握的程度,主要通过对信息安全技术的核心技术:加密和解密进行考核。 2.考核内容 DES算法的调试; 3.考核要求 1)程序运行基本正确,能够实现加密和解密简单字符串; 2)程序可以实现对文本文件的加密和解密; 3)程序运行过程中提示信息友好,容易理解与操作; 4)程序有图像操作界面,界面美观大方; 5)程序可以实现对其他形式的文件(BMP,JPG etc.)的加密和解密。 5.参考界面 编程实现功能可参考自由软件EDKing界面编程语言不限。(VC++6.0,C++,C#,JAVA etc)Des算法的原理: Des算法的入口参数有3个:Key,,Data和Mode。其中key为8个字节共64位,是Des算法的工作密钥。Data也为8个字节64为,是要被加密或解密的数据。Mode为Des的工作方式由两种:加密或解密。 如Mode为加密,则用key把数据Data进行加密,生成Data的密码形式(64位)作为?Des的输出结果; 若Mode为解密,则用key把密码形式的数据Data解密,还原为Data的明码形式(64位)作为Des的输出结果 2. 算法实现步骤 实现加密需要3个步骤。 第一步:变换明文。对给定的64位的明文x.,首先通过一个置换IP表来重新排列x.,从而构造出64位的x0, x0=IP(x)=L0R0,其中L0表示x0的前32位,R0表示x0的后32位。 第二步:按照规则迭代。规则为: Li=Ri-1 Ri=Li⊕f(Ri-1, Ki) (i=1,2,3,…,16) 经过第1步变换已经得到L0和R0的值,其中符号⊕表示数学运算“异或”,f表示一种置换,由s盒置换构成,Ki是一些由密钥编排函数产生的比特块。F和Ki将在后面介绍。 第三步:对L16R16利用IP-1作逆置换,就得到了密文y0加密过程。 3.功能介绍 为了使此程序更具功能性,我在main函数中又加入了菜单功能,更具使用性,通过输入功能改变了原先只能加密固定数据的局限性,通过循环体实现了多次加密。当然还可以加以改进使加密的数据长度更长,或是有更多功能;由于时间有限,此次实验只能做到这里,日后我还会继续完善它。 DESD算法的关键源代码 // DESDemo1.cpp : Defines the entry point for the console application. #include stdafx.h #includemalloc.h #includeiostream.h #includestring.h #includestdio.h enum{encrypt,decrypt}; //encrypt:加密,decrypt:解密 void des_run(char out[8],char[8],bool type=encrypt); void des_setkey(const char key[8]); //设置密钥 static void f_func(bool in[32],const bool ki[48]); //f函数 static void s_func(bool out[32],const bool in[48]); //s盒代替 static void transform(bool *out,bool *in,const char *table,int len); //变换 static void xor(bool *ina,const bool *inb,int len); //异或 static void rotatel(bool *in,int len,int loop); //循环左移 static void bytetobit(bool *out,const char *in,int bits);//字节组转换成位组 static void bittobyte(char *out,const bool *in,int bits);//位组转换成字节组 //置换IP表 const static char ip_table[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,3

文档评论(0)

aicencen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档