DESD算法的调试.docVIP

  • 10
  • 0
  • 约8.5千字
  • 约 14页
  • 2016-06-07 发布于重庆
  • 举报
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)

1亿VIP精品文档

相关文档