discuz网站名称,沧州网站建设哪家专业,网站开发平台开发,洛阳网站制作哪家好C语言实现DES算法实验报告解析xx工程大学实验报告(2015-2016学年第一学期)报告题目#xff1a; DES加密算法课程名称#xff1a; 密码学B任课教员#xff1a;专 业#xff1a;学 号#xff1a;姓 名#xff1a;二O一六年一月十八日一、课程概述目的#xff1a;培养学员的…C语言实现DES算法实验报告解析xx工程大学实验报告(2015-2016学年第一学期)报告题目 DES加密算法课程名称 密码学B任课教员专 业学 号姓 名二O一六年一月十八日一、课程概述目的培养学员的编程能力理解算法原理。要求给出DES算法的软件实现测试DES的加密速度。二、设计思路使用C语言进行编程简化了输入输出语句。预处理时加入了iostream包。使用了std名字空间。加密时程序输入的明文是8个ascii码生成一个16个16进制数的密文。脱密时程序输入的密文是16个16进制数生成一个8个ascii码的明文。加脱密所用密钥均由16个16进制数组成。其中16进制数全部使用大写字母。程序中大量使用了的布尔数组一个bool型变量只占用一位存储空间比int型、char型变量要小的多。这降低了程序的空间复杂度。三、采取的方案本程序是将一个由8个ascii码组成的明文分组加密生成一个由16个16进制数组成的密文。或将一个由16个16进制数组成的密文进行脱密生成一个由8个ascii码组成的明文。所用密钥由16个16进制数组成。本实验按照输入数据及初始置换、16圈迭代、子密钥生成和逆初始置换及输出数据四个步骤实现加密算法设计。1、输入数据及初始置换本程序首先会提示用户输入加密脱密识别码加密输入1脱密输入0将此识别码存入整形变量o。根据o的不同值提示用户输入8个字符(加密)或16个16进制数(脱密)。输入的明文或密文转化为二进制数后储存到布尔型数组m[65]中。初始置换通过函数IP完成函数输入为原始明文m函数将输出结果保存到布尔型数组mip[65]中。函数思想为查表含有一个整形变量数组ip[64]保存初始变换表IP。将mip的第i位赋值为m的第ip[i]位。2、子密钥生成输入16个16进制数的密钥后将密钥保存在一个16位字符数组c中通过ToEr函数将之变为二进制数。ToEr函数输入为字符数组通过switch语句逐个检查字符数组的每一位将对应的四位二进制数存在64位布尔数组k中。64 bit密钥去掉每个字节的最高位得到56 bit密钥输入通过置换选择1变换得到和各28 bit通过Zhihuan_1函数实现置换选择一。Zhihuan_1函数输入为二进制密钥数组k[64]输出为C0和D0将C0、D0分别储存在28位布尔数组C、D中。函数采用查表方式生成C0和D0。根据迭代的轮数确定C和D移位循环的位数主程序中利用一个16位整形数组来存放每一次循环左移的位数。循环左移通过XunHuan函数实现函数输入为循环位数和长度为28的布尔数组(C或者D)函数运行一次只能改变一个布尔数组的值。为了减低编程复杂度程序使用串行方法分两次进行C、D的移位。每完成一次C和D的移位进行一次置换选择二。置换选择二利用zhihuan_2函数完成。思想和Zhihuan_1函数类似。zhihuan_2函数输入为移位后的C、Dzhihuan_2函数将圈子密钥存放在16*48的二维布尔数组kk[17][49] 中。kk[i][48]表示第i圈的圈子密钥。原理图如图1所示。脱密(o0时)需要将圈子密钥交换此时可利用kk[0][49]充当中间变量无需定义新的变量减少了系统开销。图1 圈子密钥生成算法3、16圈迭代DES的每一圈迭代采用的是Feistel模型先将初始置换后的明文mip数组分成L和R两部分先将R的内容放在等长的布尔数组T中最后时需要将L的值赋为T。之后进入F函数F函数原理如图2。图2 F函数原理图程序中的F函数输入有初始置换结果的右半部分R、圈子密钥kk、迭代圈数i。输出保存在R中。先将输入的R通过查表的方法进行E拓展结果保存在48位布尔数组a中。再将a与圈子密钥k按位模二加。结果保存在a中。接下来将a分成8组分别进入8个S盒。用for控制循环8次每次操作选用6位二进制代码的开头一位和最后一位转化成十进制数控制S盒的行数再将6位二进制代码的中间四位转化成十进制数控制S盒的列数。进入第几个S盒有迭代圈数i确定。取到S盒中的十进制数后将它转化成二进制数储存在32位布尔数组T中在使用查表法完成P