◆曾清扬
DES加密算法的实现
◆曾清扬
(华北电力大学 北京 102206)
本文首先分析了DES加密算法出现的背景,对DES算法进行了简要地介绍,浅析了DES加密算法的原理,然后用DES加密算法对消息进行加解密。
DES加密算法;C++;加解密
随着信息社会的发展,人们对信息安全越来越重视,越来越多的人开始关心在网络上传输数据的安全性。而DES算法作为一个典型的加密算法,广泛地应用于各种数据加密。DES算法是从IBM 1970年初开发出的一个叫Lucifer的算法发展起来的,Lucifer是一个包含类似DES构造模块的代替-置换网络。在DES中,函数的输出与前一轮输出进行异或后,作为下一轮的输出。DES算法是一个分组加密算法,以64位为一组对数据进行加密,输入64位明文,用DES加密后输出64位密文。
在每一轮中,密钥通过移位和置换选择产生新一轮的子密钥。通过E表扩展置换数据,右半部分32比特扩展成48比特,与每一轮生成的48比特的子密钥异或,通过8个S盒进行代换、选择运算生成新的32比特数据,新的32位比特再通过P盒置换一次。通过P盒输出与数据的左半部分32比特进行异或运算,成为新的右半部分32位的数据。原来的右半部分成为新的左半部分32位的数据。每轮变换可由以下公式表示:
图2可以表示DES加密算法的轮结构。
关键函数及用途如下:
(1)IP(const int input[64],int output[64],int table[64])
初始IP置换,64比特的输入到64比特的输出,左右分别为32比特。
(2)Charchangetobit(const char input[],int output[],int *bits);把字符串类型转换为整型的二进制数进行存储,类比比特。
(3)E(const int input[32],int output[48],int table[48]) E表扩展数据,将32比特扩展成为48比特。
(4)Xor(int *a,int *b,int len)进行异或操作。
(5)S(const int input[48],int output[32],int table[8][4][16]) S盒压缩将48比特的数据压缩成32位。
(6)P(const int input[32],int output[32],int table[32]) P盒进行置换。
图1 DES加密算法框图
图2 DES加密算法的轮结构
(7)IP_In(const int input[64],int output[64],int table[64])最后一步逆置换。
(8)PC_1(const int input[64],int output[56],int table[56])密钥的置换选择1。
(9)PC_2(const int input[56],int output[48],int table[48])密钥的置换选择2。
(10)RotateL(const int input[28],int output[28], int leftCount)密钥循环左移。
(11)subKey(const int input[64],int Subkey[16][48])每一轮子密钥的生成。
输入明文以及密钥,生成密文,效果如图3所示。
图3 加密实现效果
输入密文以及密钥,生成明文。效果如图4所示。
DES加密算法较为复杂,多次运用了代换和置换的方式,实现起来有一定的难度。但是由于其S盒并未公开和其密钥可以通过穷举攻击的方式被破解,其安全性也遭到了一定的质疑。在DES的基础上也进一步发展起来了各种DES的变型,对于DES算法我们能进一步研究其变型以及变型的安全性。
图4 解密实现效果
[1][美]Bruce Schneier著,吴世忠,祝世雄,张文政等译.应用密码学(第二版)[M].北京:机械工业出版社,2014,01.
[2]杨波.现代密码学(第四版)[M]..北京:清华大学出版社,2017,01.
[3]余启航,李斌勇,杨雄凯,姚瑶.DES加密算法的过程分析研究[J].网络安全技术与应用,2018(02):43-44.
[4]漆世钱.基于VC++的DES加密算法实现[J].自动化技术与应用,2014,33(12):25-27.