c语言实现des算法实验报告.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
工程大学 实验报告 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 变换得到 C 0 和 D 0 各 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、 D , zhihuan_2 函数将圈子密钥存放在 16*48 的二维布尔数组 kk[17][49] 中。kk[i][48] 表示 .专业 .整理 . 下载可编辑 第 i 圈的圈子密钥 。 原理图如图 1 所示 。 脱密( o=0 时)需要将圈子密钥交换 ,此时可利用 kk[0][49] 充当中间变量 ,无需 定义新的变量减少了系统开销 。 密钥 置换选择 1 56 28 28 C 0 D 0 移位循环 移位循环 C1 D1 置换选择2 48 k 1 移位循环 移位循环 C2 D2 置换选择 2 48 k 2 移位循环 移位循环 C16 D16 置换选择 2 48 k 16 图 1 圈子密钥生成算法 3、16 圈迭代 DES 的每一圈迭代采用的是 Feistel 模型,先将初始置换后的明文 mip 数组分成 L 和 R 两部分,先将 R 的内容放在等长的布尔数组 T 中,最后时需要将 L 的值赋为 T。之后进入 F 函数,F 函数原理如图 2。 R=a 1 a2 a32 E a’1 a’2 a’48 K=k

文档评论(0)

171****9186 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档