C实现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文档。上传文档
查看更多
C实现DES加密算法.doc

程序设计文档 (一)设计原理: 本次作业是完成DES加密算法的。DES加密算法是用64位明文和64位密钥进行相关的运算得到。具体的实现步骤为: 将输入的明文字符转为64位的二进制代码 将输入的密钥字符转为64位的二进制代码 将64位明文二进制进行位变换 将变换后的明文二进制分为左右两个32数组 将32位右数组扩展为48位数组 将64位密钥进行除奇偶转换变成56位数组 将56位数组等分为ab两个数组 将a,b两个数组分别进行移位 将移位后的ab两个数组进行合并成56位数组 将合并后的56位数组变换成48位数组 在第10步生成的48位数组和第5步生成的48位进行异或得到新的48位数组 新的48位数组进行s盒变换后得到32位数组 将32位数组进行变换得到新的32位数组 新的32位数组和明文的左数组进行异或得到新的右数组,原来的右数组变成新的左数组 回到第5步一共迭代16次 最后将右左数组合并成64位数组 64位数组进行变换得到新的64位数组 将64位数组变换成8个字符 这次作业要求用类的思想来解决,不过我没有很好的把加密算法抽象成类的概念,只是把整个大的加密算法当成一个类,每次加密都是一个类,所有的子函数都作为算法类的公有函数。或许可以把明文抽象成一个类,密文又抽象成一个类,把他们共有的函数作为这个类的公有函数;又或许把几个函数作为一个类的公有函数,但是这样只是采用了类的形式而已并非很好的运用类的思想。本次作业采取的是第一个把整个大的加密算法当为一个类的方法。 (二)设计工作流程 (三)程序代码 #includeiostream #includestring using namespace std; class wangxianDES {public: void sr(char a[8]);//将输入的字符转入shur字符数组里去 void mwerjinzhi();//明文进行二进制转换,并放入mingwen[64]数组里 void merjinzhi();//密钥进行二进制转换,并放入miyue[64]数组里 void bmingwen();//64位初始明文进行移位变换,并放入mingwenbianhuan[64]数组里 void fenmingwen();//变换后的明文分为r和l两个32位数组,放入mingwenr[32]和mingwenl[32] void kuozhan();//r数组由32位扩展到48位,放到mingwenrk[48] void cjo();//64位密钥除去奇偶位变成56位,放到miyuecjo[56] void df();//将56位密钥等分成a和b两个28位的数组,放到miyuea[28]和miyueb[28] void ayw(int n);//a数组进行移位 void byw(int n);//b数组进行移位 void hb();//将移位后的a和b数组合并,放到miyuehb[56] void bh();//合并后将56位数组变换成48位数组,放到miyuehbh[48] void tyh();//将扩展后的r数组和合并后的48位数组进行异或运算,放到yh[48] void s();//对48位数据进行s盒变换,得到32位数据放到sbh[32] void sh();//sbh[32]的数据再变换放到szbh[32]里 void zyh();//将szbh[32]和mingwenl[32]异或放到mingwenr[32]里 void zhb();//最后将mingwenr[32]和mingwenl[32]合并到zh[64]里 void zzz();//zh[64]再变换放到aaa[64]里 int aaa[64]; private: char shur[8];//定义了所需要的数组,具体用途上边函数注释里提到 int bhs[8], mingwen[64],mingwenbianhuan[64],mingwenl[32],mingwenr[32],mingwenrk[48], miyue[64],miyuecjo[56],miyuea[28],miyueb[28],miyueyw[16],miyuehb[56], miyuehbh[48],yh[48],sbh[32],szbh[32],zhong[32],zh[64]; }; int mwbhjz[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

文档评论(0)

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

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

1亿VIP精品文档

相关文档