资源描述:
《DES算法加密解密说明文挡》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、DES算法加密解密说明文挡目录:一:文档介绍………………………………………………………………………………2二:封装类DES………………………………………………………………………………2(1)类的功能(2)设计思想(3)具体实现的函数说明三:应用程序DESUse………………………………………………………………………5(1)简单介绍(2)界面四:自我评价和总结……….………………………………………………………………6一:文档介绍这是一个关于DES加密算法的实现和运用的简单说明文档。包括三部分主要内容:(1)实现DES算法的封装类DES的设计思想和具体实现的说明
2、。(2)运用DES算法的应用程序的DESUse的简单介绍。(1)自我评价和总结二:封装类DES(1)类的功能实现DES算法,向外提供DES的完整加密和解密方法,单步加解密的中间key和中间结果。对外提供两个方法:Encry(intround,char*result,charflag);加解密。GenerateKey(char*result,intround);产生中间key。(2)设计思想因为程序用的是C++来实现,C++中没有bit的单位,所以决定用char的最后一位来表示bit。程序中所有操作都是对char的最后一位进行处理。例如,在ASC
3、
4、中a表示
5、为01100001占了1byte的空间,首先将这个01串分解出来,用0000000000000001000000010000000000000000000000000000000000000001表示,占8个byte的空间;又因为是将这些串存在char类型的数组中,为了不出现乱码,分别将其加上48(0的ASC
6、
7、数值)再进行保存.把算法中的所有固定的表格设为private数据,在生成对象的同时对表格进行初始化。根据封装的思想,基本上是算法中的每一个关键步骤单独一个函数来实现。之后根据算法的步骤依次调用各个函数。设计辅助函数Permutation(char*
8、initial,int*perm,intlength,char*result)用来实现数据的交换,ibitial表示将要对其进行操作的数组(即算法中的输入),perm为进行操作所用到的表,里面保存了int类型的数字,这些表在初始化时就已经赋值。Length即操作的长度,Resultchar类型的数组保存输出的结果.调整循环的次数,就可以得到中间的key和中间结果。图1:算法的设计图(3)具体实现的函数说明voidPermutation(char*initial,int*perm,intlength,char*result)功能:考虑到算法中很多交换,设计此
9、辅助函数,用来进行数据的交换实现:for(inti=0;i10、idDESInitialPermutation();功能:将64位的plaintext,分解成两个32位,初始化左右数据leftData,rightData。voidInitialTables();功能:给所有的表赋值。voidExpansionPermulation(charrightData[],char*result);功能:实现F的第一步,调用辅助函数,根据ETable和32位的输入rightData,得到48位的输出result,供下一步使用。voidXOR(chara[],charb[],inttime,char*xorResult);功能:将
11、两个输入数组a,b进行异或操作,结果保存到xorResult中。实现:((a[i]&1)^(b[i]&1))+48先与1相&,取出最后一位,再异或。加上48是因为ASC
12、
13、中48表示数字0,此处是为了将数字0,1表示为char。voidSubstitution(charrightData[],char*result);功能:将48位的输入转成32位的输出。实现:将48位的输入rightData每6位做一组,其中1,6位组合成row,2,3,4,5组合成colum调用函数SearchSBox去查询S-Box,返回S-Box中相应的十进制数。再调用Decima
14、lToChar函数将十进制数变成相应的4位表示的二进制数。intS