杭电密码学DES密码实验报告

合集下载

DES加密算法的简单实现实验报告

DES加密算法的简单实现实验报告

DES加密算法的简单实现实验报告一、实验目的本实验的主要目的是对DES加密算法进行简单的实现,并通过实际运行案例来验证算法的正确性和可靠性。

通过该实验可以让学生进一步了解DES算法的工作原理和加密过程,并培养学生对算法实现和数据处理的能力。

二、实验原理DES(Data Encryption Standard,数据加密标准)是一种对称密钥加密算法,它是美国联邦政府采用的一种加密标准。

DES算法使用了一个共享的对称密钥(也称为密钥),用于加密和解密数据。

它采用了分组密码的方式,在进行加密和解密操作时,需要将数据分成固定长度的数据块,并使用密钥对数据进行加密和解密。

DES算法主要由四个步骤组成:初始置换(Initial Permutation),轮函数(Round Function),轮置换(Round Permutation)和最终置换(Final Permutation)。

其中初始置换和最终置换是固定的置换过程,用于改变数据的顺序和排列方式。

轮函数是DES算法的核心部分,它使用了密钥和数据块作为输入,并生成一个与数据块长度相同的输出结果。

轮置换将轮函数的输出结果与前一轮的结果进行异或操作,从而改变数据的排列方式。

通过多轮的迭代运算,DES算法可以通过一个给定的密钥对数据进行高强度的加密和解密操作。

三、实验步骤2.初始置换:将输入数据按照一定的规则重新排列,生成一个新的数据块。

初始置换的规则通过查表的方式给出,我们可以根据规则生成初始置换的代码。

3.轮函数:轮函数是DES算法的核心部分,它使用轮密钥和数据块作为输入,并生成一个与数据块长度相同的输出结果。

在实际的算法设计和实现中,可以使用混合逻辑电路等方式来实现轮函数。

4.轮置换:轮置换将轮函数的输出结果与前一轮的结果进行异或操作,从而改变数据的排列方式。

轮置换的规则也可以通过查表的方式给出。

5.最终置换:最终置换与初始置换类似,将最后一轮的结果重新排列,生成最终的加密结果。

des算法实验报告

des算法实验报告

des算法实验报告DES算法实验报告一、引言数据加密标准(Data Encryption Standard,简称DES)是一种对称密钥加密算法,由IBM公司于1975年研发并被美国国家标准局(NBS)采纳为联邦信息处理标准(FIPS)。

二、算法原理DES算法采用了分组密码的方式,将明文数据划分为固定长度的数据块(64位),并通过密钥进行加密和解密操作。

其核心是Feistel结构,每轮加密操作包括置换和替代两个步骤。

1. 置换步骤DES算法的初始置换(IP)和逆初始置换(IP-1)通过一系列的位重排操作,将输入的64位明文数据打乱,以增加加密的强度。

2. 替代步骤DES算法中使用了8个S盒(Substitution Box),每个S盒接受6位输入,并输出4位结果。

S盒的作用是将输入的6位数据映射为4位输出,通过这种非线性的映射关系,增加了算法的安全性。

3. 轮函数DES算法的加密过程包含16轮迭代,每轮迭代中都会对数据进行一系列的位重排和替代操作。

其中,轮函数是DES算法的核心部分,它通过使用子密钥对数据进行异或操作,并通过S盒替代和P盒置换操作,产生新的数据块。

三、实验步骤为了更好地理解DES算法的加密过程,我们进行了以下实验步骤:1. 输入明文和密钥我们选择了一个64位的明文数据块和一个56位的密钥作为输入。

明文数据块经过初始置换(IP)后,得到L0和R0两个32位的数据块。

2. 生成子密钥通过对密钥进行置换和循环左移操作,生成16个48位的子密钥。

3. 迭代加密对明文数据块进行16轮的迭代加密,每轮加密包括以下步骤:a. 将R(i-1)作为输入,经过扩展置换(E-box),得到48位的扩展数据。

b. 将扩展数据和子密钥Ki进行异或操作,得到48位的异或结果。

c. 将异或结果分为8个6位的数据块,分别经过8个S盒替代操作,得到32位的S盒替代结果。

d. 将S盒替代结果经过P盒置换,得到32位的轮函数输出。

des加密算法实验报告

des加密算法实验报告

DES加密算法实验报告1. 引言DES(Data Encryption Standard)是一种对称密码算法,于1977年被美国联邦信息处理标准(FIPS)确定为联邦标准。

DES加密算法采用分组密码的思想,将明文按照64位分为一组,经过一系列的置换、替代和迭代操作,最终输出加密后的密文。

本实验旨在通过对DES加密算法的实际操作,深入理解DES的工作原理和加密过程。

2. 实验步骤2.1. 密钥生成DES加密算法的核心在于密钥的生成。

密钥生成过程如下:1.将64位的初始密钥根据置换表进行置换,生成56位密钥。

2.将56位密钥分为两个28位的子密钥。

3.对两个子密钥进行循环左移操作,得到循环左移后的子密钥。

4.将两个循环左移后的子密钥合并,并根据压缩置换表生成48位的轮密钥。

2.2. 加密过程加密过程如下:1.将64位的明文按照初始置换表进行置换,得到置换后的明文。

2.将置换后的明文分为左右两部分L0和R0,每部分32位。

3.进行16轮迭代操作,每轮操作包括以下步骤:–将R(i-1)作为输入,经过扩展置换表扩展为48位。

–将扩展后的48位数据与轮密钥Ki进行异或操作。

–将异或结果按照S盒进行替代操作,得到替代后的32位数据。

–对替代后的32位数据进行置换,得到置换后的32位数据。

–将置换后的32位数据与L(i-1)进行异或操作,得到Ri。

–将R(i-1)赋值给L(i)。

4.将最后一轮迭代后得到的数据合并为64位数据。

5.对合并后的64位数据进行逆置换,得到加密后的64位密文。

3. 实验结果对于给定的明文和密钥,进行DES加密实验,得到加密后的密文如下:明文:0x0123456789ABCDEF 密钥:0x133457799BBCDFF1密文:0x85E813540F0AB4054. 结论本实验通过对DES加密算法的实际操作,深入理解了DES加密算法的工作原理和加密过程。

DES加密算法通过对明文的置换、替代和迭代操作,混淆了明文的结构,使得密文的产生与密钥相关。

【精品】DES算法实验报告

【精品】DES算法实验报告

【精品】DES算法实验报告一、理论部分DES算法是一种对称加密算法,也是目前广泛应用的加密算法之一。

DES算法使用的是分组加密的思想,将明文数据分成一定长度的数据块,按照一定的算法进行加密,得到密文数据。

DES算法中的关键是密钥,只有持有正确密钥的人才能解密。

DES算法的密钥长度为64位,但由于存在弱密钥的问题,使用时需要特别注意。

DES算法的加密过程包括以下几个步骤:1、密钥的生成和处理:DES算法的密钥长度为64位,但由于存在弱密钥的问题,使用时需要使用程序进行特殊处理,以确保生成的密钥不为弱密钥。

2、初始置换(IP):将明文数据按照一定的规则进行置换,得到置换后的数据。

3、分组:将置换后的明文数据分成左半部分和右半部分。

4、轮函数(f函数):将右半部分进行扩展置换、异或运算、S盒代替、置换等操作,得到一个新的右半部分。

5、轮秘钥生成:生成本轮加密所需要的秘钥。

6、异或运算:将左半部分和右半部分进行异或运算,得到一个新的左半部分。

7、左右交换:将左右部分进行交换。

以上步骤循环执行16次,直到得到最终的密文数据。

二、实验部分本次实验使用C语言实现了DES算法的加密和解密过程。

具体实现过程包括以下几个部分:1、密钥的生成:使用DES算法生成64位密钥,其中包括了对弱密钥的处理。

2、置换:使用DES算法中的IP置换和IP逆置换进行数据置换。

3、轮函数:使用DES算法中的f函数进行一轮加密操作。

5、加密:循环执行16轮加密操作,得到密文数据。

以上实现过程全部基于DES算法的规范。

三、结果分析1、速度慢:由于DES算法采用的是分组加密的思想,需要执行多次操作才能得到最终结果。

因此本次实验的加密和解密速度相对较慢。

2、代码简单:本次实验的代码相对简单,只需要用到一些基本数据结构和算法即可实现DES算法的加密和解密过程。

但需要注意的是,由于DES算法本身的复杂性,代码实现中需要注意细节和边界问题。

四、总结本次实验使用C语言实现了DES算法的加密和解密过程,通过实验得到了一些结果。

des 加密算法实验报告

des 加密算法实验报告

des 加密算法实验报告DES加密算法实验报告一、引言数据加密标准(Data Encryption Standard,简称DES)是一种对称加密算法,由IBM公司于1975年研发并被美国联邦政府采用为标准加密算法。

DES算法具有高效、可靠、安全等特点,被广泛应用于信息安全领域。

本实验旨在通过对DES算法的实验研究,深入了解其原理、性能和应用。

二、DES算法原理DES算法采用对称密钥加密,即加密和解密使用相同的密钥。

其核心是Feistel结构,将明文分成左右两部分,经过16轮迭代加密后得到密文。

每一轮加密中,右半部分作为下一轮的左半部分,而左半部分则通过函数f和密钥进行变换。

DES算法中使用了置换、代换和异或等运算,以保证加密的安全性。

三、DES算法实验过程1. 密钥生成在DES算法中,密钥长度为64位,但实际上只有56位用于加密,8位用于奇偶校验。

实验中,我们随机生成一个64位的二进制密钥,并通过奇偶校验生成最终的56位密钥。

2. 初始置换明文经过初始置换IP,将明文的每一位按照特定规则重新排列,得到初始置换后的明文。

3. 迭代加密经过初始置换后的明文分为左右两部分,每轮加密中,右半部分作为下一轮的左半部分,而左半部分则通过函数f和子密钥进行变换。

函数f包括扩展置换、S盒代换、P盒置换和异或运算等步骤,最后与右半部分进行异或运算得到新的右半部分。

4. 逆初始置换经过16轮迭代加密后,得到的密文再经过逆初始置换,将密文的每一位按照特定规则重新排列,得到最终的加密结果。

四、DES算法性能评估1. 安全性DES算法的密钥长度较短,易受到暴力破解等攻击手段的威胁。

为了提高安全性,可以采用Triple-DES等加强版算法。

2. 效率DES算法的加密速度较快,适用于对大量数据进行加密。

但随着计算机计算能力的提高,DES算法的加密强度逐渐降低,需要采用更加安全的加密算法。

3. 应用领域DES算法在金融、电子商务、网络通信等领域得到广泛应用。

des算法 实验报告

des算法 实验报告

des算法实验报告DES算法实验报告引言:数据加密标准(Data Encryption Standard,简称DES)是一种对称密钥加密算法,由IBM公司在20世纪70年代初开发。

DES算法通过将明文分块加密,使用相同的密钥进行加密和解密操作,以保护数据的机密性和完整性。

本实验旨在深入了解DES算法的原理和应用,并通过实验验证其加密和解密的过程。

一、DES算法原理DES算法采用分组密码的方式,将明文分为64位的数据块,并使用56位的密钥进行加密。

其加密过程主要包括初始置换、16轮迭代和逆初始置换三个步骤。

1. 初始置换(Initial Permutation,IP):初始置换通过将明文按照特定的置换表进行重排,得到一个新的数据块。

这一步骤主要是为了增加密文的随机性和混淆性。

2. 16轮迭代(16 Rounds):DES算法通过16轮迭代的运算,对数据块进行加密操作。

每一轮迭代都包括四个步骤:扩展置换(Expansion Permutation,EP)、密钥混合(Key Mixing)、S盒替换(Substitution Boxes,S-Boxes)和P盒置换(Permutation,P)。

其中,S盒替换是DES算法的核心步骤,通过将输入的6位数据映射为4位输出,增加了加密的复杂性。

3. 逆初始置换(Inverse Initial Permutation,IP-1):逆初始置换是初始置换的逆运算,将经过16轮迭代加密的数据块按照逆置换表进行重排,得到最终的密文。

二、实验步骤本实验使用Python编程语言实现了DES算法的加密和解密过程,并通过实验验证了算法的正确性。

1. 密钥生成:首先,根据用户输入的密钥,通过置换表将64位密钥压缩为56位,并生成16个子密钥。

每个子密钥都是48位的,用于16轮迭代中的密钥混合操作。

2. 加密过程:用户输入明文数据块,将明文按照初始置换表进行重排,得到初始数据块。

DES加密实验报告

DES加密实验报告

DES加密实验报告实验目的:1.了解DES加密算法的原理和流程;2.掌握DES加密算法的编程实现方法;3.探究不同密钥长度对DES加密效果的影响。

实验设备和材料:1.计算机;2. Python编程环境。

实验步骤:1.DES加密算法原理和流程:DES(Data Encryption Standard)是一种对称加密算法,采用分组密码体制,密钥长度为56位,数据块长度为64位。

DES加密算法的流程如下:a)初始置换(IP置换):将明文分为左右两个32位的子块,并经过初始置换表IP进行置换;b)迭代加密:将初始置换结果分为左右两个子块,进行16轮迭代操作;c)轮函数:每轮迭代中,右子块与扩展置换表进行扩展置换,并与轮密钥进行异或运算,然后经过S盒替换、P置换和异或运算得到新的右子块;d)逆初始置换(IP逆置换):将最后一轮的结果进行逆初始置换,得到密文。

2.DES加密算法编程实现:首先,导入`pycrypto`库并生成合适长度的密钥;其次,定义初始置换表IP,扩展置换表E,S盒置换表S1-S8,P置换表P,以及逆初始置换表IP_inverse;然后,定义`des_encrypt`函数实现DES加密算法的逻辑:a)根据IP置换表对输入明文进行初始置换;b)将初始置换结果分为左右两个子块;c)进行16轮迭代操作,每轮迭代中更新左右子块的值;d)对最后一轮迭代结果进行逆初始置换;e)返回加密后的密文。

3.探究不同密钥长度对DES加密效果的影响:初始化明文和密钥,调用`des_encrypt`函数进行加密,并输出加密结果;分别改变密钥长度为56位、64位、128位,再次进行加密操作,并输出加密结果;比较不同密钥长度下的加密结果,进行效果分析。

实验结果:使用DES加密算法对明文进行加密,得到相应的密文。

实验结论:1.DES加密算法可以对密文进行可靠保护,提高数据的安全性;2.较长的密钥长度有助于增强DES加密算法的安全性,但同时也会增加加密和解密的运算成本;3.在实际应用中,根据需求和实际情况,选择合适的密钥长度,平衡安全性和性能的需求。

DES分组加密实验报告

DES分组加密实验报告

DES分组密码实验报告一、DES算法的实现1.DES简介DES算法工作:如Mode为加密,则用Key 去把数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。

在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。

这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。

2. DES算法详述(1)DES加密标准DES是对二元数字分组加密的分组密码算法,分组长度为64比特。

每64位明文加密成64位密文,没有数据压缩和扩展,密钥长度为56比特,若输入64比特,则第8,16,24,32,40,48,56,64为奇偶校验位,所以,实际密钥只有56位。

DES算法完全公开,其保密性完全依赖密钥。

DES的加密过程可表示为:DES(m)= IP-1T16·T15…T2·T1·IP(m).右图面是完全16轮DES算法框图:图1 完全16轮DES算法1 初始置换IP初始置换是将输入的64位明文分为8个数组,每一组包括8位,按1至64编号。

IP的置换规则如下表:2 IP-1是IP的逆置换由于第1位经过初始置换后,已处于第40位。

逆置换就是再将第40位换回到第1位。

逆置换规则如下表所示:初始置换IP及其逆置换IP-1并没有密码学意义,因为置换前后的一一对应关系是已知的。

它们的作用在于打乱原来输入明文的ASCⅡ码字划分的关系,并将原来明文的第m8,m16,m24,m32,m40,m48,m56,m64位(校验位)变成IP的输出的一个字节。

3. DES算法的迭代过程图中Li-1和Ri-1分别是第i-1次迭代结果的左右两部分,各32比特。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程实验报告课程密码学实验学院通信工程学院专业信息安全班级14083611学号********学生姓名刘博实验名称DES密码实验授课教师胡丽琴DES密码实验一、实验要求:1、了解分组密码的起源与涵义。

2、掌握DES密码的加解密原理。

3、用Visual C++实现DES密码程序并输出结果。

二、实验内容:1、1949年,Shannon发表了《保密系统的通信理论》,奠定了现代密码学的基础。

他还指出混淆和扩散是设计密码体制的两种基本方法。

扩散指的是让明文中的每一位影响密文中的许多位,混淆指的是将密文与密钥之间的统计关系变得尽可能复杂。

而分组密码的设计基础正是扩散和混淆。

在分组密码中,明文序列被分成长度为n的元组,每组分别在密钥的控制下经过一系列复杂的变换,生成长度也是n的密文元组,再通过一定的方式连接成密文序列。

2、DES是美国联邦信息处理标准(FIPS)于1977年公开的分组密码算法,它的设计基于Feistel对称网络以及精心设计的S盒,在提出前已经进行了大量的密码分析,足以保证在当时计算条件下的安全性。

不过,随着计算能力的飞速发展,现如今DES已经能用密钥穷举方式破解。

虽然现在主流的分组密码是AES,但DES的设计原理仍有重要参考价值。

在本实验中,为简便起见,就限定DES 密码的明文、密文、密钥均为64bit,具体描述如下:明文m是64bit序列。

初始密钥K是64 bit序列(含8个奇偶校验bit)。

子密钥K1, K2…K16均是48 bit序列。

轮变换函数f(A,J):输入A(32 bit序列), J(48 bit序列),输出32 bit序列。

密文c是64 bit序列。

1)子密钥生成:输入初始密钥,生成16轮子密钥K1, K2 (16)初始密钥(64bit)经过置换PC-1,去掉了8个奇偶校验位,留下56 bit,接着分成两个28 bit的分组C0与D0,再分别经过一个循环左移函数LS1,得到C1与D1,连成56 bit数据,然后经过置换PC-2,输出子密钥K1,以此类推产生K2至K16。

注意:置换PC-1、PC-2会在下文中会具体给出; 函数LS i 为向左循环移动1个位置(i=1,2,9,16)2个位置(i=3,4,5,6,7,8,10,11,12,13,14,15)。

详见下图:2) 轮变换函数f :f 是DES 加解密中每一轮的核心运算,输入A(32 bit), J(48 bit),输出32 bit 。

将A 做一个扩展运算E ,变成48 bit ,记为E(A)。

计算B=E(A)⊕J ,将B 分为8组B 1…B 8,每组B i 为6 bit ,通过相应的S 盒S i ,输出C i 为4 bit ,将所有C i 连成C(32 bit),再通过置换P ,得到最后的输出f(A,J),为32 bit 。

在加密或解密的第i 轮,A = R i-1,J = K i 。

注意:每个S 盒S i 是4×16的矩阵,输入b 0b 1b 2b 3b 4b 5 (6 bit),令L 是b 0b 5对应的十进制数,n 是b 1b 2b 3b 4对应的十进制数,输出矩阵中第L 行n 列所对应数的二进制表示。

详见下图:3) 加/解密:DES 的加密和解密几乎一样,不同之处在于加密时输入是明文,子密钥使 用顺序为K 1K 2…K 16;解密时输入是密文,子密钥使用顺序为K 16K 15…K 1。

以加密为例,输入明文分组64 bit ,先进行一次初始置换IP ,对置换后的数据X 0分成左右两半L 0与R 0,根据第一个子密钥K 1对R 0实行轮变换f(R 0, K 1),将结果与L 0作逐位异或运算,得到的结果成为下一轮的R 1,R 0则成为下一轮的L 1。

如此循环16次,最后得到L 16与R 16。

可用下列公式简洁地表示:1621,),(111,,,i R L K R f L R i i i i i i ==⊕=---最后对64 bit 数据R 16, L 16实行IP 的逆置换IP -1,即得密文分组。

注意:第16轮变换后并未交换L 16与R 16,而直接将R 16, L 16作为IP -1的输入。

详见下图:3、使用Visual C++编写程序,实现DES密码及输出界面,主要步骤:1)新建一个空项目,取名des。

2)在左边的解决方案资源管理器中添加cpp文件,取名为des.cpp。

3)在des.cpp中先写入#include<iostream>using namespace std;static bool SubKey[16][48]; //定义子密钥,使得所有函数都能调用static const unsigned char IP_Table[64] = { //定义IP置换表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,56,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};static const unsigned char IPInv_Table[64] = { //定义IP逆置换表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};static const unsigned char E_Table[48] = { //定义E扩展表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,1};static const unsigned char P_Table[32] = { //定义P置换表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};static const unsigned char PC1_Table[56] = { //定义PC1置换表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};static const unsigned char PC2_Table[48] = { //定义PC2置换表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};static const unsigned char LS_Table[16] = { //定义左移位数表1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};static unsigned char S_Box[8][4][16] = { //S盒//S114,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,//S215,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,//S310,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,//S47,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,//S52,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,//S612,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,//S74,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,//S813,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};4) 编写各个模块函数,例如:void ByteToBit(bool* Out, const unsigned char* In, int bits);//将字符数组In转化为bool数组Out,bits控制转换bit数void HalfByteToBit(bool* Out, const unsigned char* In, int bits);//将半字符数组In(4 bit)转化为bool数组Outvoid BitToByte(unsigned char* Out, const bool* In, int bits);//将bool数组In转化为字符数组Outvoid Transform(bool* Out, bool* In, const unsigned char* Table, int len);//利用置换表Table将bool数组In转换成长度为len的bool数组Out void RotateL(bool* In, int len, int loop);//对长度为len的bool数组In循环左移loop位void Des_SetSubKey(unsigned char Key[8]);//利用初始密钥Key生成16轮子密钥SubKey,注意前文已定义static bool SubKey[16][48];void Xor(bool* InA, bool* InB, int len);//将bool数组InB与InA逐位做异或,结果存入InAvoid S_Func(bool Out[32], bool In[48]);//利用S盒S_Box将bool数组In转换为bool数组Out void F_Func(bool In[32], bool Ki[48]);//利用子密钥Ki对bool数组In做轮变换函数,结果仍存入In void Des_Run(unsigned char Out[8], unsigned char In[8], bool flag);//Des加解密:输入字符数组In,输出字符数组Out,flag=1时代表加密,flag=0时代表解密。

相关文档
最新文档