- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- 城市更新项目质量管控实施方案.docx
- 中国国家标准 GB/T 18029.2-2022轮椅车 第2部分:电动轮椅车动态稳定性的测定.pdf
- 《GB/T 18029.1-2024轮椅车 第1部分:静态稳定性的测定》.pdf
- ISO9001-2022质量管理体系风险和机遇识别评价分析及应对措施记录表.docx VIP
- 《GB_T 18029.1-2024轮椅车 第1部分:静态稳定性的测定》专题研究报告.pptx
- 丹佛斯FC101变频器编程手册说明书.pdf VIP
- 丹佛斯FC111参数设置及丹佛斯变频器FC360使用说明.doc VIP
- 用于腹膜透析机的液体卡匣及腹膜透析机.pdf VIP
- 2021年新高考Ⅰ卷语文试卷真题 (解析版).docx VIP
- 球囊训练治疗便秘临床应用规范.pptx
原创力文档


文档评论(0)