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

xx工程大学

实验报告

2016学年第一学期报告题目:

课程名称: 学B

专 业:

学 号:

一、概述

二、思路

生成一个

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

加脱密由

其中6进制数全部使用大写字母程序中大量使用了的布尔数组型变量只占用一位存储空间比int型char型变量要小的多三、采取的方案

本程序是将一个由明文分组加密生成一个由将一个由由明文由本实验

1、输入数据及初始置换

本程序首先会提示用户输入加密脱密识别码加密输入65]中。

初始置换通过函数IP完成,函数输入为原始明文m,函数将输出结果保存到布尔型数组mip[65]中。函数思想为查表,含有一个整形变量数组ip[64],保存初始变换表IPmip的第i位赋值为m的第ip[i]位。

2、子密钥生成

Er函数将之变为二进制数ToEr函数输入为字符数组通过switch语句逐个检查字符数组的每一位将对应的四位二进制数存在布尔数组k中64 bit密钥去掉每个字节的最高位得到56 bit密钥输入,通过置换选择1变换得到和各28 bit,通过Zhihuan_1函数实现置换选择一Zhihuan_1函数输入为二进制密钥数组k[64]输出为C0和D0将C0D0分别储存在布尔数组CD中0和D0。

根据迭代的轮数确定C和D移位循环的位数,主程序中利用一个整形数组来存放每一次循环左移的位数循环左移通过XunHuan函数实现函数输入为循环位数和长度为

每完成一次C和D的移位,进行一次置换选择二。置换选择二利用zhihuan_2函数完成思想和Zhihuan_1函数类似zhihuan_2函数输入为移位后的CD,zhihuan_2函数将圈子密钥存放在48的二维布尔数组kk[17][49] 中[i][48]表示

脱密o=0时需要将圈子密钥交换此时可利用0][49]充当中间变量减少了系统开销

图1 圈子密钥生成算法

3、16圈迭代

DES的每一圈迭代采用的是

图2 F函数原理图

接下来将a分成

最后将L与R按位模二加4、逆初始置换

16和R16连接起来

逆初始置换原理同初始置换步骤,不再赘述。四取得的成果

201601211438FBCA对明密B217C871EAE79D2H结果如图

图3 DES加密结果图201601211438FBCA对密文6B217C871EAE79D2脱结果如图4

变换不同明文及密钥均可以正常加脱密在报告中不再罗列心得体会

6.0的环境在控制台中很难进行复制操作二进制串与ASCII码6进制数之间的转化也是实验的难点之一

通过本次编程我发现我对C/C++语言的掌握还是不够尤其是涉及到位运算我也会找机会自学这一部分内容附录

#include

using namespace std;

void ToEr(char c[],bool k[])

{

int i,j;

j=0;

for(i=1;i<=16;i++)

{

switch (c[i])

{case '0':

k[j++]=0;

k[j++]=0;

k[j++]=0;

k[j++]=0;

break;

case '1':

k[j++]=0;

k[j++]=0;

k[j++]=0;

k[j++]=1;

break;

case '2':

k[j++]=0;

k[j++]=0;

k[j++]=1;

k[j++]=0;

break;

case '3':

k[j++]=0;

k[j++]=0;

k[j++]=1;

k[j++]=1;

break;

case '4':

k[j++]=0;

k[j++]=1;

k[j++]=0;

k[j++]=0;

break;

case '5':

k[j++]=0;

k[j++]=1;

k[j++]=0;

k[j++]=1;

break;

case '6':

k[j

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值