DES实验报告

时间:2024.4.20

DES加解密算法实

一、实验目的

在这一实验中,用VC++实现DES加解密算法。完成实验后,将能够深入理解DES加解密算法及其在VC++中的实现过程。

二、实验条件

熟悉VC++开发环境和有关DES算法知识,安装了VC++6.0系统的计算机。

三、任务描述

对数据进行加密传输能有效地保证数据的机密性,DES算法是一个保护数据的机密性的经典算法,本实验在VC++环境中实现DES算法。在VC++中建立一个项目,并将资料盘中的DES程序代码添入项目中,实现加/解密功能。

四、操作步骤

1.进入Microsoft Vilual C++ 6.0系统界面,选择菜单中的File--New,出现New对话框。

2.在对话框中,选择Projects页,在左侧的列表中选择MFC AppWizard[exe],Project name文本框中输入新建项目的名称,如DES加解密算法,在Location文本框中选择项目存储路径。单击OK按钮出现MFC AppWizard-step1对话框。

3.在对话框中,选择Dialog based,单击Next按钮。

4之后出现的对话框MFC AppWizard-step 2 of 4、 MFC AppWizard-step 3 of 4中均单击Next按钮。MFC AppWizard-step 4 of 4中单击Finish,出现New Project Information对话框。单击OK按钮,一个新项目就建成了。

5. 在对话框上添加控件资源,如图1所示。

6.在VC++菜单中选择ViewClassWizard命令,为控件资源定义变量,出现对话框。可以看到类的所有可被定义变量的控件资源,为每个资源分别定义变量。如:在列表中选择IDC_EDIT1,然后单击Add Variable按钮,在其后出现的对话框中输入变量名即可。

1  DES加密解密对话框

7.添加其他变量,右击CDESDlg在弹出的菜单中选择Add Member Variable…命令,在新出现的对话框中,输入变量类型、变量名,选择变量的访问类型。

8.添加方法。双击按扭控件,可为其添加方法。

9.将方法中程序代码补充完整。

# include“math.h”添加到DES加解密算法Dlg.cpp的头部。

10.项目完成,编译运行。点击保存按钮,将实验结果保存在指定文件如试验数据.txt”中。

五、实验原理

1DES算法描述

DES是一个16轮的Feistel型结构密码,它的分组长度为64bit,用一个56bit的密钥来加密一个64bit的明文串,输出一个64bit的密文串。其中,使用密钥为64bit,实用56bit,8位用作奇偶校验。加密的过程是先对64位明文分组进行初始置换,然后分左、右两部分分别经过16轮迭代,然后再进行循环移位与变换,最后进行逆变换得出密文。加密与解密使用相同的密钥,因而它属于对称密码体制。

2给出了DES过程框图。假设输入的明文数据是64比特。首先经过初

始置换后把其左半部分32比特记为L0, 右半部分32比特记为R0,即成了置换后的输入。然后把R0与密钥产生器产生的子密钥K1进行计算,其结果记为f(R0, K1)

2  DES加密算法

再与L0进行模2加得到L0异或f(R0, K1),R0记为K1放在左边,而把L0异或f(R0, K1)放在右边,从而完成了第一轮的迭代运算。在此基础上重复上述的迭代过程,一直迭代至第16轮。所得的第16轮迭代结果成为预输出,最后经过初始置换的逆置换运算后得到密文。下面会详述DES加密过程中的基本运算。

2DES中的初始置换IP与逆置换IP_1

对于要加密的明文串64比特,初始置换把原来输入的第58位置换成第1位,原输入的第50位换为第2,, 把原输入的第7位置换成第64位,即最后一位。同样的逆初始置换是以预输出作为它的输入,该置换的输出以预输出块的第40位作为它的第1,,而以25位作为它的最后一位。

IP[65]={58,50,42,34,26,18,10,2,      IP_1[65]= {40,8,48,16,56,24,64,32,

   60,52,44,36,28,20,12,4,                 39,7,47,15,55,23,63,31,

   62,54,46,38,30,22,14,6,                 38,6,46,14,54,22,62,30,

   64,56,48,40,32,24,16,8,                 37,5,45,13,53,21,61,29,

   57,49,41,33,25,17,9,1,                  36,4,44,12,52,20,60,28,

   59,51,43,35,27,19,11,3,                 35,3,43,11,51,19,59,27,

   61,53,45,37,29,21,13,5,                 34,2,42,10,50,18,58,26,

   63,55,47,39,31,23,15,7};                 33,1,41,9,49,17,57,25};

3密码函数f

函数f的输入是一个32比特串(当前状态的右半部)和子密钥。密钥编排方案(k1,k2,,k32)1648比特的子密钥组成,这些子密钥由56比特的种子密钥k导出。每个ki都是由置换选择而来,子密钥的产生过程后面详述。图3给出了函数的示意图。它主要包含了一个应用S盒的替代以及其后跟随的一个固定置换P。密码函数f是整个加密的关键部分,它包含了如下四个功能:扩展函数ES盒运算、模2加法、置换函数。

(1)扩展函数E

扩展函数E的功能就是将一个32位的输入块扩展为48位的输出块,而这48位的输入块再分成86位的块。它是按数组E所示数据选择它所输入中的位而取得的E(R)的前3位是R32,1,2位置上的值,而E(R)的最后两位是R32,1上的值。

E[49]={32,1,2,3,4,5,4,5,6,7,8,9,8,9,10,11,12,13, 12,13,14,15,16,17, 16,17,18,

19,20,21, 20,21,22,23,24,25, 24,25,26,27,28,29, 28,29,30,31,32,31};

(2) S盒运算

在密码函数f(R,k)中有8S,称为8个不同的选择函数,分别用(S1,S2,S8)表示,参见下面所示参数设定。每个S盒都是将6位作为输入,得到一个4位块作为输出。S[4][16]= {

{14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13},

{15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9},

{10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12},

{7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14},

{2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3},

{12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13},

{4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12},

{13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11}};

(3)2加法

2加功能就是将R的各位与密钥k的各位逐位做模2加,以得到输出bi,S1为例,若B6位的一个块,则S1(B)计算如下:B的第一和最后一位表示从03之间的二进制数,令该数为i;B的中间4位表示从015之间的二进制数,令该数为j;在该表S1中查第i行第j列的数,它是从015之间的一个数,且唯一地由4位块代表,则该块就是输入BS1的输出S1(B)。例如对于输入为101000而言,行就是10,即第2行;而列是由0100确定,即第5列,S1盒的第二行与底列的交叉处即为B,因而输出为1101,因此1101就是SS1在输入为101000时的输出。

f(R, K)的计算中,它将由模2加运算得到的b1,b2,…,b48按每6个一组共分成8组,顺序记为B1,B2,…,B8,它们分别经过8个选择函数si运算变成C1,C2,…,C32,S1(B1) S2(B2)…S8(B8)=C1,C2,…,C32

(4)置换函数

置换函数是通过置换输入块的位,从32位输入中得到32位的输出。置换函数由下所示。由该表确定的函数P的输出P(C),是通过置换C的第16位为P(C)的第1位,取第7位为P(C)的第2位,…,取第25位为P(C)的第32位。

P[33]={16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25};

S1S2S88个不同的选择函数,P为置换函数,E为扩展函数,为了计算f(R, K),先规定B1,B2,…,B8每个为6位块,且B1,B2,…,B8=kiE(Ri-1)异或,于是有f(R, K)=P[S1(B1) S2(B2)…S8(B8)];因此在f(R, K)的计算中将k异或ER)分8个块,即每位6块(Bi),然后每个Bi取作Si的一个输入就得到每个都为4位的8个块Si(Bi)(i=1,2,…,8)的输出,再将此8块连接成32位的整块。这个整块就构成了P的输入,经P置换,即为f(R, K)的输出。

4子密钥的生成过程

DES中,每一轮迭代都使用了一个轮密钥。轮密钥是从用户输入的密钥k(64)产生的。实用密钥56位,另8位是奇偶校验位;输出密钥的第816,…,64位为奇偶校验位(每一字节的最后一位),这些位的值使得每个字节恰好包含了奇数个1,这样如果输入密钥中某个字节中存在一个错误,奇偶校验可以帮助查到这些错误。图4给出了子密钥的生成示意图。

图4  DES子密钥生成过程

具体的子密钥生成过程描述如下:

(1)输入的密钥先经过一个置换选择1进行重排。56位的置换结果被当成两个28位比特的量C0D0,其中C0是置换结果的前28位,D0是置换结果的后28位;置换选择1如下所示,在置换选择1中不出现第8,16,24,32,40,48,6,4位,因此实际64位的密钥在经过置换选择1后,奇偶校验位被删除掉而仅保留下有效的56位密钥。置换选择1与初始置换IP的含义类似。例如,置换结果C0的第7位是输入密钥的第9位,而置换结果C0的第10位是输入密钥的第54位。

2)在计算第i轮迭代所需要的子密钥时,首先对Ci-1Di-1进行循环左移,分别得到CiDi。循环的次数取决于i的值,若i=1,2,9,16,循环的次数是1,否则循环左移的次数为2,这些经过移位的值将作为下一个循环的输入。然后,以CiDi作为另外一个又DES算法固定的置换选择2的输入,所得到的置换结果即为第i轮迭代所需要的子密钥ki

PC_1[57]={57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4};

PC_2[49]={14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32};

5DES的解密过程

DES的解密过程与加密过程共用了同样地计算过程。两者的不同之处仅在于解密时子密钥的使用顺序与加密时相反。设加密时的子密钥为k1,k2,,k16,那么,解密时子密钥的使用顺序为k16,k15,,k1,即:用DES解密时,将以64位密文作为输入,第一轮迭代使用子密钥k16,第二轮迭代使用子密钥k15,第16轮迭代使用子密钥k1,其他运算与加密时一样,最后输出的便是64位明文。


第二篇:用C实现DES的加密实验报告


一、实验目的

1、对算法描述可进行充分理解,精确理解算法的各个步骤。

2、完成DES软件算法的详细设计。

3、用C++完成算法的设计模块。

4、编制测试代码。

二、实验内容

根据DES加密标准,用C++设计编写符合DES算法思想的加密程序,并进行测试、分析,并尽量考虑程序的优化。

三、方案设计

   DES的总体方案如下图所示。与其他任何一种加密方案一样,加密函数有两个输入:待

加密的明文和密钥。在这里,明文的长度必须为64bit,而密钥的长度为56bit.

DES加密算法的一般描述

观察上图的左边部分,可以看到明文的处理阶段经过了三个阶段。首先64BItde明文经过了一个初始置换IP后,比特重排产生了经过置换的输入。接下来的一个阶段是由对同一个函数进行16次循环组成的,这个函数本身既包含有置换又包含有替代函数。最后一个循环(第16个)的输出由64Bit组成,它是输入明文和密钥的函数,这个输出的左边和右边两个部分经过交换后就得到预输出。最后,预输出通过一个逆初始置换就生成了64bit的密文,这个置换是初始置换的逆置换。

上图的右半部分给出了54Bit密钥的使用方式,密钥首先通过一个置换函数,接着对于16个循环的每一个,都通过一个循环左移操作和一个置换草所的组合产生出一个密钥K1。对每一个循环来说,置换函数是相同的,但由于密钥比特的重复移位,产生的子密钥并不相同。

(a)初始置换

               58  50  42  34  26  18  10  2

               60  52  44  36  28  20  12  4

               62  54  46  38  30  22  14  6

               64  36  48  40  32  24  16  8

               57  49  41  33  25  17  9  1

               59  51  43  35  27  19  11  3

               61  53  45  37  29  21  13  5

               63  55  47  39  31  23  15  7

(b)逆初始置换

               40  8  48  16  56  24  64  32

               39  7  47  15  55  23  63  31

               38  6  46  14  54  22  62  30

               37  5  45  13  53  21  61  29

               36  4  44  12  52  20  60  28

               35  3  43  11  51  19  59  27

               34  2  42  10  50  18  58  26

               33  1  41  9   49  17  57  25

(c)DES的S盒子的定义:

S1

14        4  13  1  2  15  11  8  3  10  6  12  5  9  0  7 

0         15  7  4  14  2  13  1  10  6  12  11  9  5  3  8 

4         1  14  8  13  6  2  11  15  12  9  7  3  10  5  0

15  12  8  2  4  9  1  7  5  11  3  14  10  0  6  13

S2

15  1  8  14  6  11  3  4  9  7  2  13  12  0  5  10

3  13  4  7  15  2  8  14  12  0  1  10  6  9  11  5

0  14  7  11  10  4  13  1  5  8  12  6  9  3  2  15

13  8  10  1  3  15  4  2  11  6  7  12  0  5  14  9

S3

10        0  9  14  6  3  15  5  1  13  12  7  11  4  2  8

13        7  0  9  3  4  6  10  2  8  5  14  12  11  15  1

13        6  4  9  8  15  3  0  11  1  2  12  5  10  14  7

1         10  13  0  6  9  8  7  4  15  14  3  11  5  2  12

S4

7         13  14  3  0  6  9  10  1  2  8  5  11  12  4  15

13        8  11  5  6  15  0  3  4  7  2  12  1  10  14  9

10        6  9  0  12  11  7  13  15  1  3  14  5  2  8  4

2         15  0  6  10  1  13  8  9  4  5  11  12  7  2  14

S5

2  12  4  1  7  10   11  6  8  5  3  15  13  0  14  9

14  11  2  12  4  7  13  1  5  0  15  10  3  9  8  6

4  2  1  11  10  13  7  8  15  9  12  5  6  3  0  14

11  8  12  7  1  14  1  16  3  15  0  9  10  4  5  3

S6

12  1  10  15  9  2  6  8  0  13  3  4  14  7  5  11

10  15  4  2  7  12  9  5  6  1  13  14  0  11  3  8

9  14  15  5  2  8  12  3  7  0  4  10  1  13  11  6

4  3  2  12  9  5  15  10  11  14  1  7  5  0  8  13

S7

4  11  2  14  15  0  8  13  3  12  9  7  5  10  6  1

13  0  1  7  4  9  1  10  14  3  5  12  2  15  8  6

1  4  11  13  12  3  7  14  10  15  6  8  0  5  9  2

6  11  13  8  1  4  10  7  9  5  0  15  14  2  3  12

S8

13        2  8  4  6  15  11  1  10  9  3  14  5  0  12  7

1         15  13  8  10  3  7  4  12  5  6  11  0  14  9  2

7         11  4  1  9  12  14  2  0  6  10  13  15  3  5  8

2         1  14  7  4  10  8  13  15  12  9  0  3  5  6  11

密钥的产生:

(a)舍弃64位密钥中的奇偶校验位,根据下表(PC-1)进行密钥变换得到56位的密钥,在变换中,奇偶校验位以被舍弃。

置换选择 1(PC-1)

57 49 41 33 25 17 9

1 58 50 42 34 26 18

10 2 59 51 43 35 27

19 11 3 60 52 44 36

63 55 47 39 31 23 15

7 62 54 46 38 30 22

14 6 61 53 45 37 29

21 13 5 28 20 12 4

(b)                  置换选择2 (PC-2)

14 17 11 24 1 5

3 28 15 6 21 10

23 19 12 4 26 8

16 7 27 20 13 2

41 52 31 37 47 55

30 40 51 45 33 48

44 49 39 56 34 53

46 42 50 36 29 32

(c)左移调度

       I: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

左移位数: 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1

四、详细设计

算法1

DES_ENC(X64)

Exterual IP, inIP, EXP, POS, SBOX1,……SBOX8

Global K48[1-16]

State64<-IP(x64)

For i<- 1 to 16

Do {令 state64=SL32||SR32

       temp48<-EXT(SL32)

       temp48<= temp48+K48[i]

令temp48=t6[1]||t6[2]||t6[3]||t6[4]||t6[5]||t6[6]||t6[7]||t6[8]

t4[1]<-SBOX[1]  (t6[1])

t4[2]<-SBOX[2]  (t6[2])

t4[3]<-SBOX[3]  (t6[3])

t4[4]<-SBOX[4]  (t6[4])

t4[5]<-SBOX[5]  (t6[5])

t4[6]<-SBOX[6]  (t6[6])

t4[7]<-SBOX[7]  (t6[7])

t4[8]<-SBOX[8]  (t6[8])

temp32=t4[1]||t4[2]||t4[3]||t4[4]||t4[5]||t4[6]||t4[7]||t4[8]

temp32<=POS(temp32)

SR32<- temp32(异或)SL32

SL32<-SR32

}

令State64=SL32||SL32

State64<-SR32||SL32

State64<-invIP(State64)

Return State64

算法2 初始置换(IP)

IP(X64)

ConstArray[1-64],<-{58,50,42,34,26,18,10,2,60,52,44,36,28,20,23,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,26,8,57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7}

令X64=x1[1]||x1[2]||……||x1[64]

Y64=y1[1]||y1[2]||……||y1[64]

For i<- to 64

do  {y1[i] x1[ConstArrayi]

}

Return  y64

算法3 逆初始置换

InvIP(m64)

ConstArray[1-64],<-{40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,3

,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,38,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25}

令X64=m1[1]||m1[2]||……||m1[64]

Y64=n1[1]||n1[2]||……||n1[64]

For g<-1 to 64

  Do {y1[i] = x1[ConstArray1}

Return y64

算法4 扩展置换

EXE(X32)

ConsArray[1-48],<-{32,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, 19,20,21,22,23,24,25,26,27,28,29,30,31,32,1}

令X32=x1[1]||x1[2]||……||x1[32]

Y64=y1[1]||y1[2]||……||y1[64]

For j<-1 to 48

Do {y1[i] = x1[ConstArray1}

Return y48

算法5 置换函数(P)

ConstArray[1-32],<-{16,7,20,2,21,29,12,28,17,1,15,23,26,5,18,31,10,2,8,24,32,27,3,9,19,13,30,6,22,11,4,25}

令m32=m1[1]||m1[2]||……||m1[32]

Y64=n1[1]||n1[2]||……||n1[32]

For i<-1 to 32

Do {y1[i] = x1[ConstArray1}

Return n32

算法6 关于S盒算法

S盒1

SBOX1(M6)

ConstArray[0-3],[0-15]<-{14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13}

令m6=m1[1]||m1[2]||……||m1[6]

N4<-ConstArray[m1[1]*2+m1[6],m1[2]*8+m1[3]+m1[4]*2+m1[5]]

Return n4

S盒2

SBOX2(M6)

ConstArray[0-3],[0-15]<-{15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,3,13,4,7,15,2,8,1,4,12,0,1,10,6,9,11,5,0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9}

令m6=m1[1]||m1[2]||……||m1[6]

N4<-ConstArray[m1[1]*2+m1[6],m1[2]*8+m1[3]+m1[4]*2+m1[5]]

Return n4

S盒3

SBOX3(M6)

ConstArray[0-3],[0-15]<-{10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12}

令m6=m1[1]||m1[2]||……||m1[6]

N4<-ConstArray[m1[1]*2+m1[6],m1[2]*8+m1[3]+m1[4]*2+m1[5]]

Return n4

S盒4

SBOX4(M6)

ConstArray[0-3],[0-15]<-{7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14}

令m6=m1[1]||m1[2]||……||m1[6]

N4<-ConstArray[m1[1]*2+m1[6],m1[2]*8+m1[3]+m1[4]*2+m1[5]]

Return n4

S盒5

SBOX5(M6)

ConstArray[0-3],[0-15]<-{2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,11,8,12,7,1,14,2,16,3,15,0,9,10,4,5,3}

令m6=m1[1]||m1[2]||……||m1[6]

N4<-ConstArray[m1[1]*2+m1[6],m1[2]*8+m1[3]+m1[4]*2+m1[5]]

Return n4

S盒6

SBOX6(M6)

ConstArray[0-3],[0-15]<-{12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,4,3,2,12,9,5,15,10,11,14,1,7,5,0,8,13}

S盒7令m6=m1[1]||m1[2]||……||m1[6]

N4<-ConstArray[m1[1]*2+m1[6],m1[2]*8+m1[3]+m1[4]*2+m1[5]]

Return n4

SBOX7(M7)

ConstArray[0-3],[0-15]<-{4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12}

令m6=m1[1]||m1[2]||……||m1[6]

N4<-ConstArray[m1[1]*2+m1[6],m1[2]*8+m1[3]+m1[4]*2+m1[5]]

Return n4

S盒8

SBOX8(M8)

ConstArray[0-3],[0-15]<-{13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11}

令m6=m1[1]||m1[2]||……||m1[6]

N4<-ConstArray[m1[1]*2+m1[6],m1[2]*8+m1[3]+m1[4]*2+m1[5]]

Return n4

五、实现过程与测试

通过编译后输出界面如下:

输入8位密钥后,界面如下图所示。

输入字符明文,如下图所示:

六、实验结果分析

成功实现DES加解密算法,但只能完整的完成对于文件、字符串和16进制船的加密。

更多相关推荐:
3d实验报告

实验报告实验报告院系信息科学与技术学院课程名称三维动画设计日期实验报告九江学院实验报告实验报告实验报告实验报告实验报告实验报告院系信息科学与技术学院课程名称三维动画设计日期九江学院3D王燕信A1131实验报告

3D实验报告

景德镇陶瓷学院设计艺术学院实验报告课程名称计算机辅助设计三维设计姓名戈瑞琪教师董翠专业班级08陶设4班成绩日期实验项目名称1基础工具2建模3材质4灯光摄影机5渲染实验学时1基础工具8学时2建模32学时3材质16...

3d实习报告

前言所谓三维设计就是利用电脑进行设计与创作以产生真实的立体场景与动画虽然在这个学期对3DSMAX的接触才知道3DSMAX是一个广泛应用于游戏开发后期制造影视特效及专业视觉设计领域的一款功能强大的三维设计软件它是...

unity 3d实验报告

江南大学Unity3D实验报告实验题目班级姓名学号日期一目的与要求1理解使用Unity3D制作游戏的基本过程和方法2理解Unity3D软件的操作界面3掌握地形的创建和简单编辑方法4掌握游戏场景中光源的添加和设置...

3D打印实验报告

姓名:学号:指导教师:20xx年x月x日一、技术介绍3D打印是一种通过材料逐层添加制造三维物体的变革性、数字化增材制造技术,它将信息、材料、生物、控制等技术融合渗透,将对未来制造业生产模式与人类生活方式产生…

3D MAX过程训练实验报告

3D MAX过程训练实验报告,内容附图。

3d实验报告建筑材质 灯光

本科学生综合性实验报告项目组长郭恺学号0094326成员郭恺专业09环艺2班实验项目名称建筑材质灯光设计指导教师及职称陈茜讲师开课学期20xx至20xx学年二学期上课时间20xx年3月30日学生实验报告一实验综...

C语言实验报告顺序结构(程序代码)

C语言实验顺序结构实验报告程序代码顺序结构第一题includeltstdiohgtincludeltconiohgtmainfloathcprintfquot请输入相应的华氏温度hquotscanfquotfq...

人机交互实验报告

实验一实验名称最新人机交互技术实验目的了解最新人机交互的研究内容实验内容通过网络查询最新人机交互相关知识人机交互人机互动英文HumanComputerInteraction或HumanMachineIntera...

3ds max实验报告一

3ds max实验报告一,内容附图。

AE提高性实验报告

提高型实验报告实验课题KobeBryant设计型应用型实验类型综合型实验课程非线性编辑专业名称教育技术学实验班级教育技术学1101实验者周洁实验时间20xx12教育科学与技术学院一实验目的1熟悉3D层的操作2掌...

unity实验报告

安徽科技学院unity课程实习报告所在专业地理信息系统组长姓名杨明明220xx10124组内成员刘德旺220xx10114所在院系指导教师日期一实验目的及要求本次实验的总的目的是通过具体的程序的编写与unity...

3d实验报告(35篇)