以下为《Des算法作业报告》的无排版文字预览,完整内容请下载
/
Des算法作业报告
孙某某 ***0045
Des算法的原理分析:
什么是对称密码算法:
网络安全通信中要用到两类密码算法,一类是对称密码算法,另一类是非对称密码算法。对称密码算法有时又叫传统密码算法、秘密密钥算法或单密钥算法,非对称密码算法也叫公开密钥密码算法或双密钥算法。对称密码算法的加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加密解密密钥是相同的。它要求发送者和接收者在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加密解密。只要通信需要保密,密钥就必须保密。
对称算法又可分为两类。一次只对明文中的单某某(有时对字节)运算的算法称为序列算法或序列密码。另一类算法是对明文的一组位进行运算,这些位组称为分组,相应的算法称为分组算法或分组密码。现代计算机密码算法的典型分组长度为64位 这个长度既考虑到分析破译密码的难度,又考虑到使用的方便性。后来,随着破译能力的发展,分组长度又提高到128位或更长。常用的采用对称密码术的加密方案有5个组成部分(如图所示)
/
1)明文:原始信息。2)加密算法:以密钥为参数,对明文进行多种置换和转换的规则和步骤,变换结果为密文。3)密钥:加密与解密算法的参数,直接影响对明文进行变换的结果。4)密文:对明文进行变换的结果。5)解密算法:加密算法的逆变换,以密文为输入、密钥为参数,变换结果为明文。
算法原理:
DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。它的密钥长度是56位(因为每个第8 位都用作奇偶校验),密钥可以是任意的56位的数,而且可以任意时候改变。其中有极少数被认为是易破解的弱密钥,但是很容易避开它们不用。所以保密性依赖于密钥。
DES加密的算法框架如下: 首先要生成一套加密密钥,从用户处取得一个64位某某的密码口令,然后通过等分、移位、选取和迭代形成一套16个加密密钥,分别供每一轮运算中使用。
DES对64位(bit)的明文分组M进行操作,M经过一个初始置换IP,置换成m0。将m0明文分成左半部分和右半部分m0 = (L0,R0),各32位某某。然后进行16轮完全相同的运算(迭代),这些运算被称为函数f,在每一轮运算过程中数据与相应的密钥结合。
在每一轮中,密钥位移位,然后再从密钥的56位中选出48位。通过一个扩展置换将数据的右半部分扩展成48位,并通过一个异或操作替代成新的48位数据,再将其压缩置换成32位。这四步运算构成了函数f。然后,通过另一个异或运算,函数f的输出与左半部分结合,其结果成为新的右半部分,原来的右半部分成为新的左半部分。将该操作重复16次。
经过16轮迭代后,左,右半部分合在一起经过一个末置换(数据整理),这样就完成了加密过程。加密流程如图所示。/
实现DES加密算法
设明文为02468aceeca86420,密钥为0f1571c947d9e859,求对应的密文(明文左侧从1开始编号)并估计算法的运行时间。
代码详见附录
实现样例:
/
由此我们得出加密后的密文为:da02ce3a89ecac3b
算法的运行时间经多组测试为:30.40 us
结合DES算法,体会混乱、扩散的概念。
对相同秘钥的情况下输入改变1bit后的明文
秘钥:0f1571c947d9e859
原明文:02468aceeca86420
六轮后为密文:************************
明文:12468aceeca86420(改变第4位由0000→0001)
六轮后为密文:************************
与原明文六轮后相比有33位发生变化
明文:02468aceeca06420(改变第45位由1000→0000)
六轮后为密文:************************
与原明文六轮后相比有35位发生变化
明文:024682ceeca86420(改变第21位由1010→0010)
六轮后为密文:
************************
与原明文六轮后相比有31位发生变化
明文:02468acefca86420(改变第36位由1110→1111)
六轮后为密文:************************
与原明文六轮后相比有30位发生变化
明文:02468aceeca86421(改变第64位由0000→1111)
六轮后为密文:************************
与原明文六轮后相比有31位发生变化
以上五组数据可以看出des算法具有雪崩效应。
对相同明文的情况下输入改变1bit后的秘钥
明文:02468aceeca86420
(1)原某某:0f1571c947d9e859
六轮后为密文:************************
(2)秘钥:1f1571c947d9e859(改变第4位由0000→0001)
六轮后为密文:************************
与原某某加密六轮后相比有26位发生变化
(3)秘钥:0f1571c947d1e859(改变第45位由1001→0001)
六轮后为密文:************************
与原某某加密六轮后相比有30位发生变化
(4)秘钥:0f1579c947d9e859(改变第21位由0001→1001)
六轮后为密文:************************
与原某某加密六轮后相比有28位发生变化
(5)秘钥:0f1571c957d9e859(改变第36位由0100→0101)
六轮后为密文:************************
与原某某加密六轮后相比有39位发生变化
(6)秘钥:0f1571c947d9e85d(改变第62位由1001→1101)
六轮后为密文:************************
与原某某加密六轮后相比有32位发生变化
以上五组数据可以看出des算法具有雪崩效应。
分析:
首先由实验结果表明,DES算法具有很好的雪崩效应,包括明文和密钥的雪崩效应。在密钥相同的情况下,1比特的明文差异能够产生32比特的密文差异;在明文相同的情况下,1比特的密钥差异能够产生31比特的密文差异。
原轮函数正常加密:
明文为02468aceeca86420,密钥为0f1571c947d9e859
加密后为密文:************************
由此我们得出加密后的密文为:da02ce3a89ecac3b
删除E扩散:
六轮后:
************************
六轮改变28bit;
加密后密文:
************************
删除E扩散后,相对于原轮函数加密的结果来看,改变了36bit,由此可见采取E扩散分为多个子S盒,将多组的数据去调取多组的s盒进行变换,由此扩大了其复杂度,很好的保证了雪崩效应的产生。
删除S盒
六轮后:************************
六轮改变34bit;
加密后密文
************************
删除S盒后,相对于原轮函数加密的结果来看,改变了29bit,没有S盒,对于单纯的P置换只有置换的效果和加密的效果,多了S盒加密有了很大的不确定性,使其更加的混乱。
删除P置换
六轮后:
************************
六轮改变28bit;
加密后:
************************
删除P置换后,相对于原轮函数加密的结果来看,改变了28bit,由此可见P置换很好的保证了雪崩效应的产生。
经过多组测试即对不同情况分别进行多组同秘钥不同明文,和多组同明文文不同秘钥的测试来看,可以发现对于des算法来讲,每一轮次和每一环节的设计都是为了增大熵,每一环节都在使加密更趋向于无序性,而因为多轮循环的愿因,以及多个环节,每次加密时对于1bit的变化都会发生在32bit左右波动的变化,des是雪崩效应的一种很好的展现形式。
附录【1】
#include
#include
#include"tables.h"
using namespace std;
int n[4];
void Hex2Bin(int b, int* arr, int a);
void print_s(int* arr);
void opplain(string plain, int* plaintext);
void opkey(string key, int* Key);
void substitute(int* plaintext, int* Key, int* cipher_1, int* r, int* l, int* keyl, int* keyr, int* key_0);
void Encrypt(string plain, string key, int* plaintext, int* Key, int* cipher_1, int* r, int* l, int* keyl, int* keyr, int* key_0);
int main(){
int plaintext[64];
int Key[64];
int cipher_1[64];
int l[32], r[32];
int keyl[28], keyr[28];
int key_0[56];
string plain;
string key;
cout 请点击下方选择您需要的文档下载。
以上为《Des算法作业报告》的无排版文字预览,完整内容请下载
Des算法作业报告由用户“k840726”分享发布,转载请注明出处