DES加密算法及C语言实现

2015-04-29 17:01于伟黎玉香
科技尚品 2015年11期
关键词:C语言密钥加密

于伟 黎玉香

摘 要:在对称密码体制中,发收双方使用相同密钥,有着同样的加密密钥和解密密钥。在众多的加密算法中影响最大的是DES加密算法。本文详细介绍了DES加密的过程及其C语言实现。

关键词:DES;密钥;加密;C语言

0 引言

分组密码是目前应用较为广泛的一种密码体制,而DES(Data Encryption Standard)加密算法是分组密码的典型代表,也是第一个被公布出来的加密标准算法。它是第一个将密码算法公开的加密标准,如果只知道算法但没有正确的密钥就不能单纯的通过算法得到明文,其安全性得益于在破解密码时计算上和时间上的复杂性。DES分组明文的长度为64位,加密阶段却没有依照这个长度来处理,而是选择了56位密钥的方式来,由此生成对应的64为密文。

1 DES加密的流程步骤

对于DES加密而言,其操作步骤可以分为两个环节:首先,是加密阶段;接着就是子密钥产生的阶段,实现对于上述两个阶段的控制,可以完成加密的任务。

加密步骤如下:

(1)将明文以重新排列顺序 64位分组后进行初始置换,且分为左右两半,各32位;

(2)两半分别经过16轮迭代,即进行16次相同的变换,每轮迭代中使用置换和代换技术。16轮迭代后两半对调;

(3)在得到对应的两半之后,需要进行逆初始置换,由此实现对应64为密文的生成,这就是第三步骤。

子密钥的产生则由56位密钥,产生16个48位子密钥,分别供左半边的16轮迭代加密使用。

1.1 初始置换

对于分组加密,初始置换是第一步,通过一个初始置换函数DES_IP_Transform()后将64位明文分成两部分:左半部分L0和右半部分R0各32位。

1.2 新一轮数据的生成

左右两半再经过16轮迭代,在每轮迭代中,使用函数 memcpy()将上一轮的右边Ri-1直接变换为本轮的左边Li,将上一轮的右边Ri–1通过扩展置换函数DES_E_Transform(),由32位扩展到48位,再与48位子密钥经函数DES_XOR()进行异或运算后,通过S盒函数DES_SBOX()压缩成32位,经置换函数DES_P_Transform()得到32位的加密函数F,F与Li–1异或后作为本轮的右边Ri。

16轮迭代后,使用函数DES_Swap()将左右两半交换,再经逆初始置换函数DES_IP_1_Transform()得到64位密文。

1.3 S盒

在加密函数计算过程中使用了8个S盒,48位数据经过8个S盒后输出32位数据,每个S盒都由4行、16列组成,定义成一个三维数组 S[8][4][16]。对于每个S盒,输入6位,输出4位。对于上述输入数据进行分析,明确最高位和最低位,以两者为基础形成对应二进制数,由此去选择S盒4行中的行。剩下还有4位数字,可以选择S盒16列中的行。在上述行列选择之后会看到行列存在交叉的部分,这就是此处要输出的数据,最后将该数据转换为4位二进制数。这样,48位数据经过8个S盒后得到了32位。

2 子密钥产生

首先将56位密钥经过置换选择1,这里使用函数DES_PC1_Transform()将其位置重新排列。并排列后的前28位用C0表示,后28位用D0表示,如图1。

接下来要产生16个48位的子密钥也需要经过16轮迭代。在实际迭代的过程中,原本28位的 Ci-1和Di-1因为函数循环作用,使得其出现位移的情况,一般表现为向左移动一位或者两位,左移位数由数组int MOVE_TIMES[16] = {1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1}定义。通过移位我们可以获取Ci和Di,接着就需要将这两者实现合并,此时就可以得到对应56位,接着以置换的方式将其原来的次序打乱,具体过程可以参见图2,由函数DES_PC2_Transform()实现,从56位中挑出48位作为该轮的子密钥。

3 DES解密

DES解密过程和加密过程本质一致,有着相同的步骤和算法,另外DES加密算法属于对称加密技术,因此解密和加密使用相同的密钥。不同之处在于:其一,解密时是将64位密文作为算法的输入,其二,子密钥在使用时是加密过程的逆序,K16是解密过程中第1轮的子密钥,K15是第2轮的子密钥,K1是最后一轮的子密钥。

4 结束语

信息的加密和解密是数据传输中保证信息安全性和完整性的常用方法,而DES加密标准综合使用了多种置换和代换技术,具有较高的安全性,在国际上被用来作为商用保密通信和计算机通信的有效算法。该加密标准的安全性不依赖于算法本身,而取决于密钥,是一种高效、经济的算法。

参考文献

[1]郭亚军,宋建华,李莉,等.信息安全原理与技术(第2版)[M].北京:清华大学出版社,2013.

[2]张洁,朱丽娟.DES加密算法分析与实现[J].软件导刊,2007,(3):95-97.

[3]王昭,袁春.信息安全原理与应用[M].北京:电子工业出版社,2010

猜你喜欢
C语言密钥加密
探索企业创新密钥
密码系统中密钥的状态与保护*
基于Visual Studio Code的C语言程序设计实践教学探索
一种基于熵的混沌加密小波变换水印算法
基于C语言的计算机软件编程
一种对称密钥的密钥管理方法及系统
基于ECC的智能家居密钥管理机制的实现
高职高专院校C语言程序设计教学改革探索
认证加密的研究进展
论子函数在C语言数据格式输出中的应用