当前位置:文档之家› DES加密算法文档

DES加密算法文档

北京工业大学网络与信息安全概论学院:专业:指导老师:姓名:学号:目录目录 (2)一、DES算法的基本原理 (3)1.1背景介绍 (3)1.2加密原理 (3)二、DES算法的详细步骤 (4)2.1加密详细步骤 (4)2.2压缩置换到56位 (5)2.3 C0和D0的分类 (6)2.4循环左移 (6)2.5压缩置换 (7)三、DES算法的实现 (7)3.1详细设计 (8)3.1.2加密/解密文件的预览 (8)3.2文件的加密/解密 (9)3.3系统测试 (11)3.4总结 (14)一、DES算法的基本原理1.1背景介绍1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES-Data Encryption Standard)。

DES (Data Encryption Standard),是IBM在上个世纪70年代开发的单密钥对称加解密算法。

该算法利用一个56+8奇偶校验位(第8, 16, 24, 32, 40, 48, 56, 64位)=64位的密钥对以64位为单位的块数据进行加解密。

1.2加密原理DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。

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

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

通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。

二、DES算法的详细步骤2.1加密详细步骤a.明文先P置换分成L0 和R0。

b.R0通过扩展置换E从32位扩展为48位。

c.扩展后与K1异或。

d.异或结果通过S盒子转换成32位。

e.这32位再通过P置换输出32位。

f.最后,P盒置换的结果与左半部分进行异或运算,然后将左右两部分交换,之后进入下一轮迭代。

g.在完成完全相同的16轮运算后,将得到的两部分数据合在一起,将L16与R16的位置交换,再经过一个末置换函数IP-1即可得到64位的密文。

图1为DES算法的理论图解:图1 DES加密算法流程2.2压缩置换到56位通过压缩置换后64位的密钥中的奇偶校验位(第8, 16, 24, 32, 40, 48, 56, 64位)就会被去掉。

对K(64位)使用PC-1(8×7)进行置换,去掉了8个校验位。

表1 密钥置换函数PC-1(8x7)PC-157 49 41 33 25 1791 58 50 42 34 26 1810 2 59 51 43 35 2719 11 3 60 52 44 3663 55 47 39 31 23 157 62 54 46 38 30 2214 6 61 53 45 37 2921 13 5 28 20 12 42.3 C0和D0的分类经过PC-1置换后,将其置换的输出再分为前28位C0和后28位D0两部分。

图2 密钥置换输出的分法2.4循环左移再将C0和D0两部分按照下面步骤进行16轮的循环左移。

迭代顺序 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 C1和D1分别为C0和D0左移1位……C3和D3分别为C2和D2左移2位……C16和D16分别为C15和D15左移1位。

2.5压缩置换进行一轮循环左移,就按照表4进行压缩置换,得到一个子密钥。

即置换后的输出数据的位数要比置换前输入的位数要少,原来的8行7列共56位数据被压缩成8行6列48位数据。

在压缩置换过程中,第9、18、22、25、35、38、43、54共8位数据被丢掉。

最终得到所有16个子密钥,每个48位。

置换过程如图3所示。

图3 子密钥Kn的产生Kn(48位) = PC-2( CnDn(56位) )三、DES算法的实现采用MFC实现DES加密算法。

可以对导入的文档实现加密解密,加密或解密后的文件存储路径可以自定义。

图4是主界面:图4 系统主界面如果输入的密钥长度大于8,程序自动启动3重DES加密算法。

用户可以自动设置加密/解密后存储文件的路径。

也可以在不打开文件的情况下预览加密/解密前后的文件内容。

3.1详细设计3.1.1文件的选择与存储打开程序后,首先要选择加密/解密的文件,图4中的和这两个按钮可以实现这个功能,文件载入后设置了密钥,即可实现对文件的加密/解密。

主要是用CFileDialog实现的。

CFileDialog FileDlg( TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter );3.1.2加密/解密文件的预览用户可以在不打开加密/解密文件的情况下,对文件的内容进行预览。

界面中的和按钮来实现这个功能。

核心代码如下:CString strText = ""; CString szLine = ""; CStdioFile file;file.Open(m_FileEncryptOut,CFile::modeRead);while( file.ReadString( szLine ) ){strText += szLine; }AfxMessageBox(strText); file.Close();3.2文件的加密/解密对于文件的加密和解密是在一个定义时没有制定大小的缓冲区里面进行的。

缓冲区的大小是由读入文件的大小决定的。

但是它的大小总是8的倍数,当读入数据的大小不是8的整数倍时,它的大小总比读入的文件要大一点点。

len=_lread(fh_in,databuf,BUFSIZE);//返回值为读入文件的数据大小len = ((len+7)>>3)<<3;//将len变为8的倍数当输入的密钥大于8位时,系统自动启动3重DES加密算法。

if( !Is3DES ){ // 1次DESfor(int i=0,j=len>>3; i<j; ++i){DES(Out,In,&SubKey[0],ENCRYPT);Out += 8; In += 8;}}else{ // 3次DES E-D-Efor(int i=0,j=len>>3; i<j; ++i){DES(Out,In, &SubKey[0],ENCRYPT);DES(Out,Out,&SubKey[1],DECRYPT);DES(Out,Out,&SubKey[0],ENCRYPT);Out += 8; In += 8;}}同样的,在解密的时候,若输入的密钥大于8位时,系统自动启动3重DES 算法。

加密和解密算法主要实现都是DES(char Out[8],char In[8],const PSubKey pSubKey,bool Type)函数来实现。

其中Type—ENCRYPT:加密,DECRYPT:解密,文件加密还是解密就看Type的值。

核心代码如下:UpdateData(true);HFILE fh_out,fh_in;//输入输出文件句柄fh_in=_lopen(m_FileEncrypt,OF_READ);fh_out=_lcreat(m_FileEncryptOut,0);long len;// 读取明文到缓冲区while( (len=_lread(fh_in,databuf,BUFSIZE)) >0 ){I=len%8;//对明文长度求余// 设置子密钥if(m_KeyEncrypt.GetLength()>=16)m_KeyEncrypt=m_KeyEncrypt.Left(16);m_des.SetSubKey(m_KeyEncrypt);// 将缓冲区长度变为8的倍数len = ((len+7)>>3)<<3;// 在缓冲区中加密m_des.Encrypt(databuf,databuf,len);// 将密文写入输出文件if(I==0)_lwrite(fh_out,databuf,len);else_lwrite(fh_out,databuf,len-8+I);}_lclose(fh_in);_lclose(fh_out);解密过程与加密过程一样,只不过解密过程调用的函数是m_des.Decrypt()。

加密的m_des.encrypt()与解密的m_des.Decrypt()这两个函数都是通过调用DES()函数来实现对文件的加密解密的。

值得注意的是,当明文或者是要解密的密文的长度不是8的倍数时,缓冲区这个时候的长度总是比输入的实际长度要大一些,这样缓冲区中多出来的部分默认值是0,他们也会被加密或者解密。

所以每做完一次加密或解密时,总要判断明文的长度是否为8的倍数,如果不是在存储加密/解密后的文件时,应该去掉这些多余的部分。

if(I==0)_lwrite(fh_out,databuf,len);else_lwrite(fh_out,databuf,len-8+I);3.3系统测试由于加密和解密的过程类似,所以我们在这里仅对加密过程进行测试。

在一个名为“test.txt”的文本文档里面输入“Who am I?”,对系统的加密功能进行测试,密钥为“12”。

图5,图6,图7为测试后的截图。

图5 点击加密按钮后的提示图6 点击显示密文按钮后的提示图7 点击显示明文按钮后的提示当你在没有选择任何文档或者没有填写既要的情况下点击加密按钮或者想查看明文/密文时,系统会报错。

如图8,图9和图10所示。

图8 直接点击加密按钮后的提示图9 直接点击显示密文按钮后的提示图9 直接点击显示明文按钮后的提示3.4总结在理解了DES算法的基本原理后,对DES算法的基本原理和详细步骤进行的阐述。

通过几天的努力,用MFC实现了DES算法的加密解密过程。

但是程序界面有待改进,可以在实现了加密解密的基础上直接现实出明文和密文。

其他地方也需要美化。

相关主题