您的当前位置:首页正文

DES对称加密算法研究及C_编程实现

来源:华佗健康网
第19卷第4期2009年12月

甘肃广播电视大学学报

JournalofGansuRadio&TVUniversity

Vol.19No.3Dec.2009

DES对称加密算法研究及C++编程实现

沈慧娟

(甘肃广播电视大学教学指导中心,甘肃兰州730030)

[摘要]通过2个简单实例阐述了数据加密的基本过程,分析了DES数据加密算法的基本原理,从输入数据、初16轮迭代及逆置换四个方面详述了DES算法的执行过程,并利用C++语言实现了DES算法类的封始置换、装。

[关键词]DES算法;迭代;置换;C++[中图分类号]TP312

[文献标识码]A

[文章编号]1008蛳4630(2009)04蛳0057蛳03

随着计算机网络技术的迅速发展,网上数据

通信越来越频繁,为了保证数据在网上传输时不被窃取或篡改,就有必要对数据进行加密,以保证数据的安全传输。而所谓的加密,就是用基于数学方法的程序和保密的密钥对信息进行编码,把计算机数据变成一堆杂乱无章难以理解的字符串,只允许合法的接收者恢复数据的本来面目,而对于非法窃取者,即使得到了密文,也无法辨认原始数据[1]。

我们可以通过二个实例来简要说明数据加密的基本过程。

例如,将数字0,1,2,3,4,…,8,9的自然顺序保持不变,但使之与1,2,3,4…,9,0分别对应,那么明文“5894”对应的密文就是“6905”,对于不知道密钥的人来说,“6905”就是一串无意义的数据,这种加密方式称为替换加密,属于对称加密的一种,此时的密钥为1。

再如,将文字“甘肃广播电视大学理工农医中心教研组建设”按每行7个字的顺序重新排列,不足7个字用“啊”填充,写成如下形式:

甘肃广播电视大

学理工农医中心教研组建设啊啊

“甘学教肃理研广工组播发送时按列的顺序

农建电医设视中啊大心啊”发送,合法的接收者收到这样的密文后只需按一定的间隔读取一个汉字即可还原成原始数据(明文),而对于非法窃取密文的人来说就是一串无意义的文字,这种加

收稿日期:2009蛳09蛳28

密方式称为置换加密,是对称加密的一种。

下面主要介绍DES加密算法的应用及基于C++语言的实现方法。

1DES算法描述

DES算法为对称密码体制中的一种分组密码。在加密中,加密与解密使用同一种算法,发送方先生成随机对称密钥对数据进行加密形成复杂的加密密文后,连同密钥一同发送给接收方,接收方收到密文后,则使用加密时用的密钥及相同算法的逆算法对密文进行解密,最终得到明文。

该算法的一个主要特点是不需要同步,因而在分组交换网中有着广泛的用途。目前在国内,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法[1]。

2DES算法工作原理及流程

DES采用算法混乱和扩散的组合技术(先替代后置换),先对整个的明文进行分组。每一个组长为64位,采用16轮迭代,对每一个64位二进制数据进行加密处理,产生一组64位密文数据,并将各组密文串接起来,即得出整个的密文,达到对数据进行加密的目的。

作者简介:沈慧娟(1976蛳),女,河南商丘人,讲师,主要从事计算机语言类课程教学与研究工作。

58甘肃广播电视大学学报第19卷第4期

该算法有3个入口参数key、data和mode,其中key为8个字节共64位,是加密解密使用的密钥;data也为8个字节64位,是要被加密或被解mode为DES的工作方式———加密或密的数据;

解密。算法执行时,若mode为加密,则用Key对数据data进行加密,生成data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key对密码形式的数据data解密,还原为data的明码形式(64位)作为DES的输出结果[2]。

算法的执行流程为:

S1:输入64位的明文数据块。

S2:初始置换。把输入的64位数据块按位重新组合,并把输出分为两部分左明文和右明文,每部分各长32位,其置换规则如表1所列[3]。

表1

40.8,48,16,56,24,64,32,39,38.6,46,14,54,22,62,30,37,36.4,44,12,52,20,60,28,35,34.2,42,10,50,18,58,26,33,

初始转换

7,47,15,55,23,63,3145,13,53,21,61,295,

3,43,11,51,19,59,27,1,41,9,49,17,57,25,

图1所示为DES加密算法的流程图

即将输入的第58位换到第1位,第50位换到第2位,…,依次类推,最后一位是原来的第7位,L0,R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位。如假设置换前输入值为D1D2D3…D64,则经过初始置换后的结果为:L0=D58D50…D8;R0=D57D49…D7。

S3:迭代。在有密钥控制下执行DES的16轮迭代,并把得到的结果交换左、右各32bit的位置。

表2

40.8,48,16,56,24,64,32,39,38.6,46,14,54,22,62,30,37,36.4,44,12,52,20,60,28,35,34.2,42,10,50,18,58,26,33,

逆置换

7,47,15,55,23,63,315,45,13,53,21,61,2943,11,51,19,59,27,3,

1,41,9,49,17,57,25,

图1

DES加密算法流程

其中,函数(fRi,K)i的算法描述如图2所示。

S4:逆置换(初始置换的逆运算)。将经过16次迭代运算后得到的L16和R16作为输入进行逆置换,即得到1个64位明文加密后的密文。置换的规则如表2所示。

例如,经过初始置换后,第1位处于第40位,而通过逆置换,又将第40位换回到了第1位;第2位处于第8位,逆置换后,又将第8位换回到了第2位;……

图2(fRi,K)i的算法描述

注:“扩展置换”是将右明文从32bits扩展到48bits;密钥是将最初64bits密钥通过放弃每个

第8位得到56bits密钥,每轮迭代从这个56bits密钥产生不同的48bits子密钥,并与48bits的右明文进行异或运算,将结果传递到下一步做S盒置换。S盒再将48bits的输入压缩为32bits的

2009年12月沈慧娟:DES对称加密算法研究及C++编程实现59

输出,由P盒进行32bits到32bits的简单换位,将P盒置换的结果与左明文进行异或运算便得到新的右明文,并通过交换将旧的右明文变为新的左明文,这样,一轮迭代的任务即告完成。

voidDec_DES(constBYTEIData_bit[8],const

BYTEKey_bit[8],BYTEOData_bit[8]);

//将64字节的01代码转换成对应的8个字节的数据

BYTE*Bin_ASC(constBYTEabyte[64],BYTEbit[8]);

//将8个字节的数据转换成对应的64字节的01代码

BYTE*ASC_Bin(constBYTEbit[8],BYTEabyte[64]);

};

DesEnter是DES算法进行加密或解密的关键函数,参数data_in是需要进行加密或解密的数据,data_out是加密或解密后的输出结果,key是具有8个字节用于加密或解密的密钥,mode表述工作方式(加密或解密)。因篇幅所限,内部代码略。

3算法的C++编程实现

通过对DES算法加密和解密过程的分析,结合C++语言特点,封装了1个C++类的实现———DES加密算法模板类DES_Alg。

#defineBYTEunsignedchar#defineLPBYTEBYTE*

classDES_ALG{

public:

//执行des算法加密或解密的入口函数

intDesEnter(constBYTE*Data_in,BYTE*Data_out,intdatalen,constBYTEkey[8],intMode);

//数据校验

intDesMac(constBYTE*mac_data,BYTE*mac_code,intdatalen,constBYTEkey[8]);

private:

//对输入的2个数据进行异或运算

voidXOR(constBYTEData_in1[8],constBYTEData_in2[8],BYTEout[8]);

//创建子密钥函数(16个)

voidCreSubKey(constBYTEOldKey[8],BYTENew_SubKey[16][8]);

//创建加密函数

voidEnc_DES(constBYTEIData_bit[8],constBYTEkey_bit[8],BYTEOdata_bit[8]);

//创建解密函数,与加密函数相反,迭代顺序从16到1

4小结

由于DES使用的是56位的密钥,所以就有256种可能的密钥。如果一台计算机以每微秒执行一次的速率检查这么多密钥,并且查到一半就可以找到正确的密钥的话,也要1000年的时间。由此看来,DES是一个相当好的数据加密算法。

[参考文献]

[1]周斌.利用汇编语言实现DES加密算法[J].单片机与

嵌入式系统应用.2002,(6).

[2]数据加密技术,[EB/OL].http://www.reader8.cn/exam/

2008/1106/article_11350.html,2008-11-6.

[3]AtulKahate.密码学与网络安全[M].金名等译.北京:

清华大学出版社,2009.81.

ResearchonDESSymmetricEncryptionAlgorithmand

C++Implementation

SHENHui蛳Juan

[责任编辑龚

勋]

因篇幅问题不能全部显示,请点此查看更多更全内容