C语言实现DES算法实验报告材料.doc

C语言实现DES算法实验报告材料.doc

ID:56523239

大小:470.50 KB

页数:23页

时间:2020-06-27

C语言实现DES算法实验报告材料.doc_第1页
C语言实现DES算法实验报告材料.doc_第2页
C语言实现DES算法实验报告材料.doc_第3页
C语言实现DES算法实验报告材料.doc_第4页
C语言实现DES算法实验报告材料.doc_第5页
资源描述:

《C语言实现DES算法实验报告材料.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、xx大学实验报告报告题目:课程名称:任课教员:专学姓业:号:名:DES加密算法密码学B年月日一、课程概述目的:培养学员的编程能力,理解算法原理。要求:给出DES算法的软件实现,测试DES的加密速度。二、设计思路使用C++语言进行编程,简化了输入输出语句。预处理时加入了用了std名字空间。加密时程序输入的明文是脱密时程序输入的密文是8个ascii码,生成一个16个16进制数的密文。16个16进制数,生成一个8个ascii码的明文。iostream包。使加脱密所用密钥均由16个16进制数组成。其中16进制数全部使用大写字母。程序量使用了的布尔数组,一个bool

2、型变量只占用一位存储空间,比int型、char型变量要小的多。这降低了程序的空间复杂度。三、采取的方案本程序是将一个由8个ascii码组成的明文分组加密,生成一个由组成的密文。或将一个由码组成的明文。所用密钥由16个16进制数8个ascii16个16进制数组成的密文进行脱密,生成一个由16个16进制数组成。本实验按照输入数据及初始置换、据四个步骤实现加密算法设计。1、输入数据及初始置换16圈迭代、子密钥生成和逆初始置换及输出数本程序首先会提示用户输入加密脱密识别码,加密输入1,脱密输入0,将此识别码存入整形变量o。根据o的不同值,提示用户输入8个字符(加密

3、)或16个16进制数(脱密)。输入的明文或密文转化为二进制数后储存到布尔型数组初始置换通过函数IP完成,函数输入为原始明文m[65]中。m,函数将输出结果保存到布尔型数组mip[65]中。函数思想为查表,含有一个整形变量数组ip[64],保存初始变换表IP。将mip的第i位赋值为m的第ip[i]位。2、子密钥生成输入16个16进制数的密钥后,将密钥保存在一个16位字符数组c中,通过ToEr函数将之变为二进制数。ToEr函数输入为字符数组,通过switch语句逐个检查字符数组的每一位,将对应的四位二进制数存在64bit密钥去掉每个字节的最高位得到C0和D06

4、4位布尔数组k中。56bit密钥输入,通过置换选择1变换得到各28bit,通过Zhihuan_1函数实现置换选择一。Zhihuan_1函数输入为二进制密钥数组k[64],输出为C0和D0,将C0、D0分别储存在28位布尔数组C、D中。函数采用查表方式生成C0和D0。根据迭代的轮数确定C和D移位循环的位数,主程序中利用一个16位整形数组来存放每一次循环左移的位数。循环左移通过XunHuan函数实现,函数输入为循环位数和长度为28的布尔数组(C或者D),函数运行一次只能改变一个布尔数组的值。为了减低编程复杂度,程序使用串行方法,分两次进行C、D的移位。zhih

5、uan_2函每完成一次C和D的移位,进行一次置换选择二。置换选择二利用数完成。思想和Zhihuan_1函数类似。zhihuan_2函数输入为移位后的C、zhihuan_2D,函数将圈子密钥存放在16*48的二维布尔数组kk[17][49]中。kk[i][48]表示第i圈的圈子密钥。原理图如图1所示。脱密(o=0时)需要将圈子密钥交换,此时可利用义新的变量减少了系统开销。kk[0][49]充当中间变量,无需定密钥置换选择5628281C0D0移位循环C移位循环D11置换选择移位循环C2248k1移位循环D2置换选择248k2移位循环C移位循环D1616置换选

6、择248k16图1圈子密钥生成算法3、16圈迭代DES的每一圈迭代采用的是Feistel模型,先将初始置换后的明文mip数组分成L和R两部分,先将R的容放在等长的布尔数组之后进入F函数,F函数原理如图2。R=a1a2…a32T中,最后时需要将L的值赋为T。Ea’a’…a’1248K=k1k2…k48S1S2S3S4S5S6S7S8P图2F函数原理图R、圈子密钥kk、迭代圈数i。输程序中的F函数输入有初始置换结果的右半部分出保存在R中。先将输入的R通过查表的方法进行E拓展,结果保存在48位布尔数组a中。再将a与圈子密钥k按位模二加。结果保存在a中。接下来将a

7、分成8组,分别进入8个S盒。用for控制循环8次,每次操作选用6位二进制代码的开头一位和最后一位转化成十进制数,制代码的中间四位转化成十进制数,控制控制S盒的行数,再将6位二进S盒有迭代圈数iS盒的列数。进入第几个确定。取到S盒中的十进制数后,将它转化成二进制数,储存在在使用查表法完成P盒置换,最终结果保存在R中。32位布尔数组T中,最后将L与R按位模二加,得到新的R,完成一次迭代。4、逆初始置换16次迭代后,先将L16和R16连接起来,保存到64位布尔数组m中,m之前用于保存明文,这样减小了程序占用的空间。另外,为了保证加脱密算法的一致性,迭代时最后一圈

8、不需要交换L与R,但程序中为了简化编程复杂度,在迭代时仍然交换了L

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。