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

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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 个 ascii 16 个 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 和 D0 64 位布尔数组 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] 充当中间变量,无需定 密钥 置换选择 56 28 28 1 C 0 D 0 移位循环 C 移位循环 D1 1 置换选择 移位循环 C 2 2 48 k1 移位循环 D 2 置换选择 2 48 k2 移位循环 C 移位循环 D 16 16 置换选择 2 48 k 16 图 1 圈子密钥生成算法 3、16 圈迭代 DES 的每一圈迭代采用的是 Feistel 模型,先将初始置换后的明文 mip 数组分成 L 和 R 两部分,先将 R 的内容放在等长的布尔数组 之后进入 F 函数, F 函数原理如图 2。 R=a 1 a 2 …a32 T 中,最后时需要将 L 的值赋为 T。 E a’ a’ … a’1248 K=k 1 k 2 …k48 S1 S2 S3 S4 S5 S6 S7 S8 P 图2 F 函数原理图 R、圈子密钥 kk、迭代圈数 i。输 程序中的 F 函数输入有初始置换结果的右半部分 出保存在 R 中。先将输入的 R 通过查表的方法进行 E 拓

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档