实验二:分组密码实验

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1实验二:分组密码实验一、实验目的通过使用DES算法对实际的数据进行加密和解密来了解密码体制的原理。二、实验要求(1)所下发程序是不完整的,请你完成程序中加密函数的第16次迭代,解密函数的第1次迭代,调试程序确保正确。(2)用自己姓名拼音的前八个字母作为明文,学号后八位作为密文,观察实验结果,检验程序的功能是否正确。(3)调试程序,观察并记录:L3与R2的值,阐述他们之间有何关系,并解释结果。(4)连续点击解密按钮,观察明文输出有什么变化,并解释为什么?修改程序使连续点击解密按钮,输出的明文不会发生前面观察的现象。(5)修改程序,使得密文以二进制码的形式输出。(选做)三、相关知识信息加密根据采用的密钥类型可以划分为对称密码算法和非对称密码算法。对称密码算法是指加密系统的加密密钥和解密密钥相同,或者虽然不同,但是可以从其中任意一个推导出另一个,更形象的说就是用同一把钥匙开锁和解锁。在对称密码算法的发展历史中曾出现过多种优秀的算法,包括DES、3DES、AES等。下面我们以DES算法为例介绍对称密码算法的实现机制。DES算法是美国IBM公司在20世纪70年代提出,并被美国政府、美国国家标准局和美国国家标准协会采纳和承认的一种标准加密算法。它属于分组加密算法,即明文加密和密文解密过程中,信息都是按照固定长度分组后进行处理的。混淆和扩散是它采用的两个最重要的安全特性,混淆是指通过密码算法使明文和密文以及密钥的关系非常复杂,无法从数学上描述或者统计。扩散是指明文和密钥中每一位信息的变动,都会影响到密文中许多位信息的变动,从而隐藏统计上的特性,增加密码安全。DES将明文分成64比特位大小的众多数据块,即分组长度为64位。同时用56位密钥对64位明文信息加密,最终形成64位的密文。如果明文长度不足64位,则将其扩展为64位(例如补零等方法)。具体加密过程首先是将输入的数据进行初始换位(IP),即将明文M中数据的排列顺序按一定的规则重新排列,生成新的数据序列,以打乱原来的次序。然后将变换后的数据平分成左右两部分,左边记为L0,右边记为R0,然后对R0施行在子密钥(由加密密钥产生)控制下的变换f,结果记为f(R0,K1),再与L0做逐位异或运算,其结果记为R1,R0则作为下一轮的L1。如此循环16轮,最后得到L16、R16,再对L16、R16施行逆初始置换IP-1,即可得到加密数据。解密过程与此类似,不同之处仅在于子密钥的使用顺序正好相反。DES全部16轮的加密过程如图1-1所示。2图1-1DES加密/解密流程DES的加密算法包括3个基本函数:1.初始换位(IP)它的作用是把输入的64位数据块的排列顺序打乱,每位数据按照下面换位规则重新组合。即将第58位换到第1位,第50位换到第2位,…,依次类推。重组后的64位输出分为L0、R0(左、右)两部分,每部分分别为32位。58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,462,54,46,38,30,22,14,6,64,56,48,40,32,24,16,857,49,41,33,25,17,9,159,51,43,35,27,19,11,361,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7明文IPR0L0fL1R0R1L0f(R0,K1)LiRi-1RiLi-1f(Ri-1,Ki)L15R14R15L14f(R14,K15)L16R15R16L15f(R15,K16)IP-1密文fffK1K2KiK163R0和K1经过f(R0,K1)变换后的输出结果,再和L0进行异或运算,输出结果做为R1。R0则赋给L1。L1和R1同样再做类似运算生成L2和R2,…,经过16次运算后生成L16和R16。2.f函数f函数是多个置换函数和替代函数的组合函数,它将32位比特的输入变换为32位的输出,如图1-2。Ri经过扩展运算E变换后扩展为48比特的E(Ri),与Ki+1进行异或运算后输出的结果分成8组,每组6比特的并联B,B=B1B2B3B4B5B6B7B8,再经过8个S盒的选择压缩运算转换为4比特,个4比特合并为32比特后再经过P变换输出为32比特的f(Ri-1,Ki)。图1-2DES算法中f函数的处理流程3.逆初始置换函数IP-1它将L16和R16作为输入,进行逆初始换位得到密文输出。逆初始换位是初始换位的逆运算,换位规则如下表所示:40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,3138,6,46,14,54,22,62,30,37,5,45,13,53,21,61,2936,4,44,12,52,20,60,28,35,3,43,11,51,19,59,2734,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25DES的加密算法中除了上面介绍的3个基本函数,还有一个非常重要的功能模块,4即子密钥的生成模块,具体子密钥的产生过程如图1-3所示。输入的初始密钥值为64位,但DES算法规定,其中第8、16、......64位是奇偶校验位,不参与DES运算。所以,实际可用位数只有56位,经过缩小选择换位表1(表1-2)即密钥置换PC-1的变换后,初始密钥的位数由64位变成了56位,将其平分为两部分C0、D0,然后分别进行第1次循环左移,得到C1、D1,将C1(28位)、D1(28位)合并后得到56位的输出结果,再经过缩小选择换位表2(表1-2)即密钥置换PC-2,从而便得到了密钥K1(48位)。依此类推,便可得到K2、......K16,需要注意的是,16次循环左移对应的左移位数要依据表1-1中规则进行。表1-1左移位数规则表1-2缩小选择换位表1表1-2缩小选择换位表2图1-3子密钥产生流程5四、实验步骤(1)参考程序中其他各次的加密解密迭代程序,完成加密的第16次迭代、解密的第1次迭代。(2)运行所下发软件,在第一个输入框用自己姓名拼音的前八个字母作为明文,在第二个输入框以学号后八位作为密文,观察实验结果。如图1.4所示:图1.4程序运行窗口(3)调试程序,观察并记录:L3与R2的值,探索他们之间有何关系,并解释结果。在程序的适当地方设置断点(如图1.4所示)。在调试窗口的Watch窗口输入要观察变量的名称,6图1.4在voidCDESDlg::DESDIEDAI()中设置断点(4)修改程序使连续点击解密按钮,输出的原文不会发生前面观察的现象。应注意找到最终存放原文的数组变量,看它是否被循环赋值,即:每点击一次解密按钮,该数组中的值都被赋新值。(5)修改程序,使得密文以ASCII码的形式输出。修改voidCDESDlg::DESDIEDAI()中的代码(如图1.5)7如图1.5voidCDESDlg::DESDIEDAI()中需修改代码。

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功