c语言实现des实验报告,C语言实现DES算法实验报告.doc

C语言实现DES算法实验报告课案

xx 大学实验报告报告题目:课程名称:任课教员:专学姓业:号:名:DES 加密算法密码学 B年 月 日一、课程概述目的:培养学员的编程能力,理解算法原理。要求:给出 DES 算法的软件实现,测试DES 的加密速度。二、设计思路使用 C++ 语言进行编程,简化了输入输出语句。预处理时加入了用了 std 名字空间。加密时程序输入的明文是脱密时程序输入的密文是8 个 ascii 码,生成一个 16 个 16 进制数的密文。16 个 16 进制数,生成一个 8 个 ascii 码的明文。iostream 包。使加脱密所用密钥均由 16 个 16 进制数组成。其中 16 进制数全部使用大写字母。程序中大量使用了的布尔数组,一个bool 型变量只占用一位存储空间,比int 型、char 型变量要小的多。这降低了程序的空间复杂度。三、采取的方案本程序是将一个由 8 个 ascii 码组成的明文分组加密,生成一个由组成的密文。或将一个由码组成的明文。所用密钥由16 个 16 进制数8 个 ascii16 个 16 进制数组成的密文进行脱密,生成一个由16 个 16 进制数组成。本实验按照输入数据及初始置换、据四个步骤实现加密算法设计。1、输入数据及初始置换16 圈迭代、子密钥生成和逆初始置换及输出数本程序首先会提示用户输入加密脱密识别码,加密输入1,脱密输入 0,将此识别码存入整形变量 o。根据 o 的不同值,提示用户输入 8 个字符(加密)或 16 个 16 进制数(脱密)。输入的明文或密文转化为二进制数后储存到布尔型数组初始置换通过函数 IP 完成,函数输入为原始明文m[65] 中。m,函数将输出结果保存到布尔型数组 mip[65] 中。函数思想为查表, 含有一个整形变量数组 ip[64] ,保存初始变换表 IP。将 mip 的第 i 位赋值为 m 的第 ip[i] 位。2、子密钥生成输入 16 个 16 进制数的密钥后,将密钥保存在一个16 位字符数组 c 中,通过ToEr 函数将之变为二进制数。 ToEr 函数输入为字符数组, 通过 switch 语句逐个检查字符数组的每一位,将对应的四位二进制数存在64 bit 密钥去掉每个字节的最高位得到C0和D064 位布尔数组 k 中。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 的移位。zhihuan_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置换选择248k 16图 1 圈子密钥生成算法3、16 圈迭代DES 的每一圈迭代采用的是Feistel 模型,先将初始置换后的明文mip 数组分成 L和 R 两部分,先将 R 的内容放在等长的布尔数组之后进入 F 函数, F 函数原理如图 2。R=a 1 a 2 …a32T 中,最后时需要将 L 的值赋为 T。Ea’ a’ … a’1248K=k1k 2 …k48S1S2S3S4S5S6S7S8P图2F 函数原理图R、圈子密钥 kk、迭代圈数 i。输程序中的 F 函数输入有初始置换结果的右半部分出保存在 R 中。先将输入的 R 通过查表的方法进行 E 拓

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值