- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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 拓
您可能关注的文档
- 公安民警心理素质训练.doc
- DAY3.数码管.pptx
- DB2_610基础认证_5.docx
- DB2分区表.docx
- 公司费用报销单填写及票据粘贴12.ppt
- day09笔记(tomcat、Servlet).doc
- DB2基础sql学习.doc
- 公司营销战略规划高伟.ppt
- 公差试题库.doc
- DB2定时任务创建步骤.docx
- 2022-2023年注册环保工程师之注册环保工程师公共基础综合提升模拟卷含答案讲解.docx
- 二级注册建筑师之法律法规经济与施工练习试题附答案详解.docx
- 2023年一级建造师之一建铁路工程实务综合提升试卷包括详细解答.docx
- 2022-2023年二级建造师之二建公路工程实务通关检测卷包括详细解答.docx
- 2022-2023年二级造价工程师之土建建设工程计量与计价实务通关检测卷含答案讲解.docx
- 认识图形课件一年级上册数学人教版.pptx
- 2022-2023年注册测绘师之测绘综合能力考前冲刺练习试题和答案.docx
- 2022-2023年土地登记代理人之土地登记代理实务检测卷.docx
- 2023年教师资格之幼儿保教知识与能力综合提升练习题库附有答案详解.docx
- 2023年质量员之市政质量基础知识考前冲刺练习题提供答案解析.docx
文档评论(0)