DES算法加密解密说明文挡.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DES算法加密解密说明文挡 目录: 一:文档介绍 ………………………………………………………………………………2 二:封装类DES………………………………………………………………………………2 类的功能 设计思想 具体实现的函数说明 三:应用程序DESUse………………………………………………………………………5 简单介绍 界面 四:自我评价和总结……….………………………………………………………………6 一:文档介绍 这是一个关于DES加密算法的实现和运用的简单说明文档。包括三部分主要内容: 实现DES算法的封装类DES的设计思想和具体实现的说明。 运用DES算法的应用程序的DESUse的简单介绍。 自我评价和总结 二:封装类DES 类的功能 实现DES算法,向外提供DES的完整加密和解密方法,单步加解密的中间key和中间结果。 对外提供两个方法:Encry( int round,char *result,char flag);加解密。 GenerateKey( char *result, int round);产生中间key。 设计思想 因为程序用的是C++来实现,C++中没有bit的单位,所以决定用char的最后一位来表示bit。程序中所有操作都是对char的最后一位进行处理。例如,在ASC||中a表示了1byte的空间,首先将这个01串分解出来,00000001000000000000000000000001 表示, 占8个byte的空间; 又因为是将这些串存在char类型的数组中,为了不出现乱码,分别将其加上48(0的ASC||数值)再进行保存. 把算法中的所有固定的表格设为private数据,在生成对象的同时对表格进行初始化。根据封装的思想,基本上是算法中的每一个关键步骤单独一个函数来实现。之后根据算法的步骤依次调用各个函数。 设计辅助函数Permutation(char *initial, int *perm,int length, char* result)用来实现数据的交换,ibitial表示将要对其进行操作的数组(即算法中的输入),perm为进行操作所用到的表,里面保存了int类型的数字,这些表在初始化时就已经赋值。Length即操作的长度, Result char类型的数组保存输出的结果. 调整循环的次数,就可以得到中间的key和中间结果。 图1: 算法的设计图 具体实现的函数说明 void Permutation(char *initial, int *perm,int length, char* result) 功能:考虑到算法中很多交换,设计此辅助函数,用来进行数据的交换 实现:for(int i=0; ilength; i++) { result[i]=initial[perm[i]-1]; } DES(char dataParam[],char keyParam[],int dataLength, int keyLength); 功能:构造函数,对DES对象进行初始化。 实现:根据要加密的原文dataParam和密码keyParam的长度,给变量data和key赋值。对长度不到64位的赋值为0。函数内调用InitialTables初始化相关的表,和DESInitialPermutation初始化L(1), R(1); void DESInitialPermutation(); 功能:将64位的plaintext,分解成两个32位,初始化左右数据leftData,rightData。 void InitialTables(); 功能:给所有的表赋值。 void ExpansionPermulation(char rightData[], char * result); 功能:实现F的第一步,调用辅助函数,根据ETable和32位的输入rightData,得到48位的输出result,供下一步使用。 void XOR(char a[], char b[],int time, char* xorResult); 功能:将两个输入数组a,b进行异或操作,结果保存到xorResult中。 实现:((a[i] 1 )^ (b[i]1 ))+48 先与1相,取出最后一位,再异或。 加上48是因为ASC||中48表示数字0,此处是为了将数字0,1表示为char。 void Substitution(char rightData[], char * result); 功能:将48位的输入转成32位的输出。 实现:将48位的输入ri

文档评论(0)

***** + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档