首页 > 编程知识 正文

算法精解:c语言描述pdf,c语言实验报告答案

时间:2023-05-03 20:48:09 阅读:163813 作者:4992

基于c语言的DES算法实验报告分析

xx工程大学

实验报告

(2015-2016学年第一学期) )。

报告主题: DES加密算法

课程名称:密码学b

任何班级的教师:

专业领域:

学号:

姓:

二一六年一月十八日

一.课程概述

目的:培养学习者的编程能力,了解算法原理。

要求:给出DES算法的软件实现,并测试DES的加密速度。

二.设计构想

用c语言进行了编程,简化了输入输出语句。 预处理时放了iostream包。 使用了std名称空间。

加密时程序输入的明文用8个ascii码生成16个16进制的密文。

脱密时程序输入的密文为16进制16个,生成8个ascii码的明文。

用于加密的密钥全部由16个十六进制数字组成。

其中的十六进制数全部使用大写字母。

程序中大量使用的布尔数组,一个bool型变量只占用1位存储空间,比int型、char型变量小得多。 这样可以降低程序空间的复杂性。

三.采取的方案

该程序对由8个ascii码组成的明文数据包进行加密,生成由16进制16个组成的密文。 或者对十六进制16个构成的密文进行解码,生成由8个ascii码构成的明文。 使用的密钥由16个十六进制数构成。

本实验按照输入数据和初始置换、16圈迭代、子密钥生成、逆初始置换和输出数据4个步骤实现了加密算法的设计。

1、输入数据及初始置换

本程序首先提示用户输入加密的解扰码。 加密输入1、解扰输入0、将该识别码存储在整形变量o中。 根据o的值,提示用户输入8个字符(加密)或16个十六进制字符)。 输入的明文或密文被转换为二进制并存储在布尔数组m[65]中。

初始置换通过函数IP进行,将函数输入到原始明文m中,函数将输出结果保存在布尔型数组mip[65]中。 函数思想是查找表,包括整形变量阵列ip[64],并保存初始变换表IP。 将mip的第I个位分配给m的第ip[i]个位。

2、生成子密钥

输入16个十六进制密钥后,将密钥保存在16位字符数组c中,并使用ToEr函数将其转换为二进制。 ToEr函数作为字符数组输入,switch语句逐一检查字符数组中的每个位,并将相应的4位二进制文件存在于64位布尔数组k中。

64位密钥去除每字节的最高有效位,得到56位密钥输入,利用Zhihuan_1函数对置换选择1变换得到的和各28位进行置换选择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的移位完成时,进行置换选择2。 置换2用zhihuan_2函数进行。 思想与Zhihuan_1函数相似。 zhihuan_2函数作为移位后的c、d被输入,zhihuan_2函数将循环密钥存储于16*48的二维布尔数组kk[17][49]。 kk[i][48]表示第I周的圈键。 原理图如图1所示。

需要更换私密(o=0时)圈密钥。 在这种情况下,可以将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位二进制码的前1位和最后1位变换为10进制,控制s盒的行数,再将6位二进制码的中间4位变换为10进制,控制s盒的列数。 至于进入第几个s盒,迭代次数I已经确定。 获取s盒的十进制数后,将其转换为二进制数,存储在32位的布尔数组t中,利用查表法完成p

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。