DES加密算法

2024-12-24

DES加密算法(共7篇)

DES加密算法 篇1

随着信息技术的飞速发展,人们对信息系统的安全性,信息传输的保密性要求越来越高。伴随着通信和计算机技术发展起来的现代密码学,不仅在解决信息的机密性、而且在解决信息的完整性、可用性和抗抵赖性方面发挥着不可替代的作用。密码技术使得两个在不安全信道中通信的人,以一种使其敌手不能明白和理解通信内容的方式进行通信,保证了信息的安全。就密码体制而言,一般分为两类,对称密码体制和公钥密码体制。

对称密码体制其特点是发送和接收的双方使用同一密钥,且该密钥必须保证不被泄露;加密算法的安全性依赖于密钥的秘密性,而非算法的秘密性。DES加密算法就是对称加密体制中的佼佼者。1977年1月,美国政府采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES)。DES被授权用于所有公开的和私人的非保密通信场合,后来它又曾被国际标准组织采纳为国际标准。

虽然现在DES已不作为数据加密标准,但至今它仍然被广泛的应用,而且它是一种最有代表性的分组加密体制。因此,研究这一算法的基本原理、设计思想、安全性分析以及实际应用中有关问题,对于掌握分组密码理论和当前的实际应用都是很有意义的。

1 DES算法原理

DES是一种分组加密算法。明文分组长度为64位。加密得到的密文分组长度为64位。密钥长度64位,8个字节。每一个字节的最高位用于奇偶效验,所以有效密钥长度为56位。其分组加密过程描述如下:(1)子密钥Ki的生成。(2)64位的明文经过一个初始置换IP后,被分成左右两半部分,每个部分32位,以L0和R0表示。(3)进行16轮迭代变换:第i轮变换将上一轮变换所得到的结果的右半部分与第i个子密钥Ki结合,这个过程称为f函数。第i轮变换结果的左半部分为上一轮变换结果的右半部分(即:Li=Ri-1),其右半部分为上一轮变换结果的左半部与上一轮变换结果的右半部经过F函数处理所的结果的异或:Ri=Li-1⊕F(Ri-1,Ki)。(4)16轮变换之后左右两部分再连接起来,经过一个初始逆置换IP-1得到密文。其加密过程如图1所示。

DES的解密算法与加密算法完全相同,只需要将密钥的应用次序与加密时相反应用即可。即解密过程是初始置换函IP数接受长度为64比特的密文输入,将16个子密钥按照K16到K1的顺序应用与F函数的16轮迭代运算中,然后将迭代的结果经由末置换函数IP-1得到64位的明文输出。

2 两个密钥的三重DES

由于DES密钥只有56bit,易于遭受穷举时攻击。作为一种替代加密方案,Tuchman提出使用两个密钥的三重DES加密方法,并在1985年成为美国的一个商用加密标准。该方法使用两个密钥,执行三次DES算法,如图2所示。加密的过程是加密-解密-加密,解密的过程是解密-加密-解密。

采用两个密钥进行三重加密的好处有:(1)两个密钥合起来有效密钥长度有112bit,可以满足商业应用的需要,若采用总长为168bit的三个密钥,会产生不必要的开销。(2)加密时采用加密-解密-加密,而不是加密-加密-加密的形式,这样有效的实现了与现有DES系统的向后兼容问题。因为当K1=K2时,三重DES的效果就和原来的DES一样,有助于逐渐推广三重DES。(3)三重DES具有足够的安全性,目前还没有关于攻破三重DES的报道。

3 Java语言编程实现DES算法

3.1 子密钥的生成

1)PC-1变换。将原密钥的各位按照PC-1矩阵重新排列,这一过程剔除了奇偶校验位。PC-1如下:

2)将排好的密钥分成两部分,前面28位为C0,后面28位为D0

3)从i=1开始,循环执行16次以下步骤得到16个子密钥。

(1)对Ci-1和Di-1进行相同位数的循环左移,得到Ci和Di

左移的位数为:

i取数值: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

(2)连接Ci和Di,按照矩阵PC-2排列选择合适的位,构成子密钥Ki,该过程将56位压缩到48位,PC-2如下:

(3)i=i+1,转到(1),直到生成16个全部自密钥。

3.2 对64位明文分组加密

1)取得64位明文,不足补齐(补0)

2)对明文各位按照IP矩阵进行排列,矩阵为:

3)将得到的结果分为左右各32位两部分,称为L0,R0

4)从i=1开始,循环执行16次下列的加密过程

(1)按照下面矩阵E将32位的Ri-1扩展为48位,所得结果称为E(Ri-1),E阵为:

(2)将E(Ri-1)和Ki按位异或

(3)将所得结果分为8个部分,每个部分6位,形成B[1],…B[8]

(4)S盒替代。

S盒是8个子矩阵,称为S[1],….S[8],替代如下:将B[i]的第1位和第6位组成一个数称为R,第2、3、4、5位组成一个数称为C,用S[i]中对应的(R,C)中的4位数替换B[i],这样就将原来的48位替换成32位。

(5)P盒置换,按照下面的矩阵重新排列上面的结果

(6)将上一步处理的结果与Li-1按位异或,得到新的Ri,该过程可以简单记为:Ri=Li-1⊕F(Ri-1,Ki)

(7)i=i+1转(4)的第一步,直到完成16次循环

(8)进行IP-1置换,将上面得到的L16R16按照下面的矩阵进行置换:

加密过程结束,解密过程是用K16,K15,…..K1

3.3 DES算法的伪代码表示

C[0]d[0]=PC1(KEY)

FOR I=1 TO 16

C[I]=LS[I](C[I-1])

D[I]=LS[I](D[I-1])

K[I]=PC2(C[I]D[I])

L[0]R[0]=IP(PLAIN BLOCK)

FOR I=1 TO 16

L[I]=R[I-1]

R[I]=L[I-1]⊕F(R[I-1],K[I])

CIPHER BLOCK=FP-1(L[16]R[16])

4 算法安全性分析

DES算法具有相当高的复杂性,密码函数F的非线性性质非常好,起到的“扰乱”效果非常显著,并且还遵循了严格雪崩准则和比特独立准则,这使得要破译它的开销要超过可能获得的利益。再加上其便于理解掌握,经济有效,因此,得到了广泛的应用。算法具有极高的安全性,到目前为止,除了用穷举搜索法对算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒种检测一百万个密钥,则它搜索完全部密钥就需要将近2300年的时间。而采用三重DES,破译它就更可想而知了。当然,这并不等于说是不可破解的。而实际上,随着硬件技术和网络的发展,其破解的可能性越来越大,而且,所需要的时间越来越少。

DES算法的有效密钥长度为56位,因此,在实际应用中,我们应避开使用第8,16,24,......64位作为有效数据位,才能保证DES算法安全可靠地发挥作用。如果不了解这一点,将不能保证DES加密数据的安全性,对运用DES来达到保密作用的系统产生数据被破译的危险,这正是DES算法在应用上的误区,留下了被人攻击、被人破译的极大隐患。

参考文献

[1]陈卓.网络安全技术[M].北京:机械工业出版社,2004.

[2]胡建伟.网络安全与保密[M].北京:西安电子科技大学出版社,2003.

DES加密算法 篇2

随着信息社会的到来, 人们在享受信息资源所带来的巨大的利益的同时, 也面临着信息安全的严峻考验。数据传输保密的数学模型主要包括数据的加密与解密, 使用加密算法能做到数据加密, 在各种信息安全技术措施中, 硬件结构的安全和操作系统的安全是基础, 密码技术是网络安全与保密的核心和关键。DES算法是目前使用最多的加密算法, 也是最有代表性的分组加密算法, 虽然DES加密算法在面对差分分析、线性分析以及穷举密钥法时有被破解的风险, 但凭借其自身的优点, 相关产品仍然占据市场的主导地位, 目前广泛的应用于保密通信之中。随着三金工程尤其是金卡工程的启动, DES算法广泛应用于POS机、银行自助终端、磁卡及智能卡 (IC卡) 、加油站等领域, 来实现核心数据的保密, 如信用卡持卡人的PIN的加密传输, IC卡与POS间的双向认证、金融交易数据包的MAC校验等, 均用到DES算法[1]。本文介绍了D E S算法的基本原理及V C++具体实现过程。

2 DES算法的实现

对DES而言, 密钥表面上是64位的, 然而只有其中的56位被实际用于算法, 其余第8、16、24、32、40、48、56、64 bit 8位可以被用于奇偶校验, 并在算法中被丢弃[2]。DES的算法是对称的, 既可用于加密又可用于解密。功能是将输入的64位数据块经过初始置换按位重新组合, 并把输入分为左右两部分 (L、R) , 各部分各有32位, 将L1=R0, R1=L0f (R0, K1) 。DES加密过程如图1所示。

将加密的数据分割成以若干个以64位为单位的数据 (如果位数不够用00或FF补足) , 按照8行8列进行排列, 使用固定的IP置换表对64位的二进制明文块进行重新排列, 置换完毕的明文块被分为两个半区L0 (前32位) 、R0 (后32位) 。

2.1 子密钥产生过程描述

初始K e y值为6 4位, 在D E S加密算法中, 第8、16、......64位用来进行奇偶校验位, 不直接应用于DES运算, 这样密钥能用位数实际只剩下56位。经过缩小选择轮位变换后, 密钥位数成为了56位, 然后把它平分为两部分, 分别占28位, 再对每部分进行循环左移, 把两部分重新生成的位数重新合并, 进行新一轮的缩小选择轮位变换, 新密钥位再次减8剩下48位, 依次循环, 可生成得到K1~K15的密钥, 每次对密钥循环左移位数要依据表1对应的规则进行:

以上是DES算法进行加密的规则, 解密过程与加密规则大致相似, 不同之处是迭代时第一次用子密钥K15, 然后用K14、……, 最后再用K0, 可以看成加密算法的逆过程[3]。

2.2 乘积变换

乘积变换包括:扩展置换, 与48比特密钥进行异或操作, S-盒置换, P-盒置换。

(1) 先将输入的32比特的数据分成8组, 每组4比特。把上一组的最后一位加在该组的前面, 把下一组的最前的一位放在该组的后面, 且8组为循环, 然后再与已经经过移位和置换的4 8比特密钥进行异或操作, 将得到的结果新的48比特数据送入S-盒进行非线性替换。

(2) S-盒将48比特的输入分成8组, 每组6比特。若输入的6比特为A= (a1, a2, a3, a4, a5, a6) 则a1和a6两位二进制数可以确定0~3之间的一个数字, 它决定S-盒置换表中的某一行, 而a2、a3、a4、a5这四位二进制数可以确定0~15之间的一个数字, 它决定S-盒置换表中的某一列, 行列交界交叉处所存的十六进制数的二进制数转换即为新的输出。

(3) 通过将48比特数据替换成新的32比特的数据, 新得到32比特的数据再经过P-盒进行换位重排.将P-盒置换的结果与最初的6 4比特分组的左半部分的3 2比特进行异或运算, 作为下一轮变换输入的右半部分, 而原来的右半部分作为下一轮变换输入的左半部分, 即完成一轮变换[4]。

2.3 逆置换

初始明文按照IP重排, 16轮后的密文按照IP-1重排即为最后密文, 如表2和表3所示:

3 主要模块设计与实现

在VC++环境中, 通过M F C工具建立工程, 实现对界面的设计和完善。类的共有接口只设计一个, 即加密解密函数。其他像读文件, 写文件, 加密变换函数等等设置为私有涉及内容:文件操作, STL向量, 数制变换, 位操作及函数设计等[5]。具体的函数功能为:

(1) bytetobit () :将输入的字节组转换为位组。

(2) transform () :通用置换函数, 根据具体情况确定要执行哪种置换。

(3) memcpy () :进行内存单元的复制。

(4) f_func () :此函数是des_run () 函数运行的关键, 是将32比特的输入转化为32比特的输出。

(5) xor () :进行异或运算, 异或运算是按位作不进位加法运算。

(6) bittobyte () :将位组转换字节组。

3.1 加解密功能的具体实现

加解密功能实现, 代码如下:

这个函数整个算法运行程序的最主要部分。这个函数用于加密还是解密取决于type的类型, 如果type为encrypt, 则进行加密;如果type的类型为decrypt, 则进行解密。文件的加密:通过浏览文件 (也可以通过选择目录选取所需要的文件) , 读取需要加密的文件, 输入密钥, 生成DES加密文件[6]。生成文档的图如图2, 加密功能实现如图3。

3.2 文件的加解密

通过浏览文件 (也可以通过选择目录选取所需要的文件) , 读取需要加解密的文件, 输入密钥, 再进行密钥确认, 生成新的密文或还原成之前的文件。如图4和图5所示, 文档加密后, 显示为乱码, 达到加密要求。

4 结束语

本系统可以加密任何格式的单个文件, 如:t x t、doc、cpp等, 计算量小, 处理速度快, 加密算法简洁, 不会占用系统太多的空间。但只限于单重加密, 且存在加密漏洞。下一步进一步改进完善, 将此加密系统做成一个DES三重加密, 安全性更高更好。

摘要:密码技术是信息安全的核心技术, 把密码算法应用到程序中对数据进行加密, 实现数据的安全保密也越来越重要, 本文简要介绍了DES (Data Encryption Algorithm, DEA) 算法的基本原理及具体实现过程, 通过对分组密码DES算法子密钥循环缩小选择轮位变换产生过程描述、扩展置换, 与48比特密钥进行异或操作的乘积变换、IP逆变换的分析, 并结合VC++编程环境, 以界面的形式实现加密和解密。实验结果表明, 生成的系统计算量小, 处理速度快, 达到了效果。

关键词:DES,VC++,加密算法,乘积变换

参考文献

[1]梁峰, 相敬林, 赵妮.基于混沌理论的差异演化算法研究[J].计算机仿真.2006.171-173

[2]解双建, 原亮, 谢方方.DES算法原理及其FPGA实现[J].计算机技术与发展, 2011, 21 (7) :158-160, 164.

[3]李永彬, 雷菁, 熊春林等.DES加密算法的高速FPGA实现[J].计算机与自动化技术, 2005, 31 (7) :39-41.

[4]贺金平, 吕杨.基于蓝牙Ad hoc网络安全机制的研究与加密设计[J].自动化技术与应用, 2007 (6) :85-87.

[5]农盛功, 周满元.基于三维空间的图像加密算法[J].计算机系统应用, 2010, 19 (8) :87-91.

DES加密算法 篇3

DES算法主要包括:初始置换、16轮迭代的乘积变换、初始逆置换以及16个子密钥产生器[2]。DES加密过程如图1所示。

初始置换主要用于对明文中的各位进行换位,目的在于打乱明文中各位的排列次序,输出结果按奇偶分为左右两路送入乘积变换部分。在这个过程中不使用密钥,仅仅对64位码进行移位操作。而进行逆初始置换是为了使加解密统一使用同一种算法。初始置换与初始逆置换只是将64位输入的数据按位进行重新排列,只需要一些输入输出端口,按照置换规则把输入与输出对应关联即可[3]。下面只介绍密钥的产生与16轮迭代乘积变换模块的设计。

1子密钥生成模块

DES算法每一轮次迭代都需要一个子密钥,要实现DES算法就需要提前生成子密钥,并且按照时序准确地传递给迭代过程。

子密钥产生模块由选择控制、循环移位控制等部分构成。该模块的输入是64位初始密钥,输出为参加每次迭代运算的子密钥,另外还有一个控制信号(time),用来控制在不同迭代过程中移位的次数。本设计采用硬件描述语言(VHDL)按照子密钥产生的过程,通过置换选择1、循环移位、置换选择2,一步一步得到子密钥的。循环移位仿真结果如图2所示。图中,c0、d0是经过置换选择1后得到的前后28位,Time为控制移位次数的控制信号,k1为移位后的结果,再经过置换选择2即可得子密钥。

因为每轮移位的次数不同,所以每轮子密钥产生的时间也不相同,所以会给迭代运算带来延迟,这也是采用VHDL设计存在的不足。从VHDL设计结果可以看出,原密钥与每轮子密钥之间有固定的关系,因此,可以通过软件分析,建立子密钥相对于原始密钥的关系表,在硬件实现时直接使用此关系表即可,这样也可以有效地节省硬件资源。

2迭代变换

DES算法是典型的迭代分组密码算法,实现过程的核心是16轮次相同的迭代运算。输入的64位明文先执行初始置换对明文进行换位处理;然后通过子密钥k1~k16对明文进行16轮乘积变换,即进行16次迭代处理;最后经过逆初始置换的处理,得到64位的密文输出。16次迭代的目的是使明文增加混乱性和扩散性,避免输出密文残留统计规律,使破译者无法反向推算出密钥。

轮迭代运算中的f函数是非线性的,它是每轮实现混乱和扩散的最关键的模块,也是整个加密算法的核心,它包括E盒扩展置换、S盒置换和P盒置换,其基本过程如图3[4]所示。其中,E盒扩展置换、P盒置换的原理和实现方法与初始置换以及逆初始置换类似,运算过程都是线性的,而S盒是一个复杂的非线性函数,正是经过了S盒的非线性变换,才使算法达到很好的“混乱”效果,从而具有较强的安全性。因此,S盒的设计是DES算法的关键部分,S盒设计的优劣将影响整个算法的性能。

基于S盒的表现形式是矩阵形式,因此在使用VHDL语言建立S盒模型时,一般都会想到直接用多重选择CASE语句[5]。在这里即采用CASE语句实现。用CASE选择语句实现S盒有两种方式:一种是直接使用S盒的6位输入为6个变量的CASE语句方式,另一种方式是使用双重CASE嵌套语句,即外层使用2个输入控制S盒的横向选择;内层使用4个输入控制S盒的纵向选择。采用双重CASE语句可以直接定位输出结果。这两种方式下占用资源的情况如表1所示。

根据表1比较的结果可以看出,选择双重CASE语句建立S盒模型可以大大节省资源,其仿真结果如图4所示。s0为S盒的输入,s2为S盒的输出,这样就完成了非线性的变换。图5为通过QuartusⅡ实现的基于FPGA的DES加密算法的硬件仿真线路图。

本文通过对各个模块特别是S盒与子密钥生成模块的详细分析,给出了DES加密的一种实现方法,并在此基础上对部分模块进行了验证仿真,给出了硬件仿真线路图。这种设计方法是根据功能模块分层进行的,因此可以节省设计时间,减少设计输入的错误,简化验证的过程。

摘要:介绍了DES算法的基本原理与加密过程,给出了基于FPGA的DES算法的硬件实现,并且用Quanus Ⅱ实现了模块仿真,验证了DES加密算法。

关键词:DES 算法,FPGA,仿真

参考文献

[1] STALLINGS W.Cryptography and network security princi- ples and practices[M],prentice Hall,1996.

[2] 胡向东,魏琴芳.应用密码学[M].北京:电子工业出版 社,2006.

[3] 高献伟,周玉坤,路而红,等.DES 算法硬件实现的研究[J].北京电子科技学院学报,2001,(1) :11-15.

[4] 张福泰.密码学教程[M].武汉:武汉大学出版社,2006.

DES加密算法 篇4

DES是Data Encryption Standard(数据加密标准)的缩写,它是由IBM公司研制的一种加密算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准。DES算法在AT、磁卡及智能卡、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密。如信用卡PIN的加密传输、IC卡的双向认证等都用到了DES算法,而且DES在电子商务中也得到了广泛地应用。但是现在很多产品都屏蔽了DES算法的加密过程,同时在教学中,由于具体的信息通过手工的方式来实现其加密过程是非常困难的,使得掌握DES算法造成了一定的难度。本文就是在这种背景下,用Delphi语言模拟其加密实现的过程,并且把实现过程中用到的变量用文本框的方式让使用者输入,帮助初学者快速掌握DES算法。

1 DES算法的原理

DES是一个分组加密算法,它以64位为分组对数据进行加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。它的密钥长度是56位(因为每个第8位都用作奇偶校验),密钥可以是任意的56位数,而且可以随时改变。DES算法的具体实现过程包括两大部分,即密钥计算和加密计算。

1.1 DES的密钥计算

从用户处取得一个64位(本文如未特指,均指二进制位)长的密码Key,Key=K1K2K3…K65K64,去除64位密码中作为奇偶校验位的第8、16、24、32、40、48、56、64位,剩下的56位作为有效输入密钥。通过固定的置换对56位密钥进行置换,并将置换的结果分为两个部分即前28位记为C0和后28位记为D0。

DES算法的密钥是经过16次迭代得到一组密钥。把前面得到的C0和D0进行循环左移一位得到C1和D1,再通过固定的置换得到32位的密钥,即Key1。然后再把上次循环左移得到的Ci和Di依次左移,左移的位数有固定的规定,每次都不相同,然后再进行固定的置换依次得到32位的密钥,即Key2…Key16。

1.2 DES的加密过程

DES对64位的明文分组进行操作,通过一个初始置换,将明文分组成为左半部分和右半部分,各32位长。然后进行16次完全相同的运算。这些运算成为函数f,在运算过程中数据与密钥结合,经过16轮后,左、右半部分结合在一起,经过一个末置换(初始置换的逆置换),完成该算法。加密过程:DES(m)=IP-1。T16。T15。…。T2。T1。DES标法流程图如图一所示:

1.3 DES的解密过程

数据解密的算法与加密算法相同,区别在于在迭代过程中和数据进行按位异或的密钥的使用顺序不同。在加密中是按照第i次迭代就采用第i次迭代生成的密钥进行异或;而解密时第i次迭代就采用第17-i次迭代生成的密钥和数据进行异或,即密匙的次序相反。如果各轮加密密匙分别是K1,K2,K3,…,K16,那么解密密匙就是K16,K15,K14,…,K1。

2 DES算法的Delphi实现

具体的实现如图二和图三所示。输入要加密的明文和密钥,单击“加密”按钮在密文文本框中显示加密后的密文,单击“解密”按钮,在明文文本框中显示解密后的明文。单击“清屏”按钮清空所有文本框,以便进行新的加密。在本系统中可以实现对数字、字母和汉字的加、解密。

在编程的时候,如果密钥长度小于8位,就在密钥后面补x;如果输入的明文不是8的倍数,则在最后补NUL。然后把补齐后的明文转换为二进制,按照DES算法的原理先生成密钥再进行加密和解密运算。

加密实现的主要的程序:

3 结束语

本系统可以很形象地表现出该算法的加密实现过程,对初学者学习此算法提供了帮助。但是在通用性方面还要不断加以完善。

参考文献

[1]曹天杰.计算机系统安全[M].北京:高等教育出版社,2003.

[2]阙喜戎,孙锐.信息安全原理及应用[M].北京:清华大学出版社,2003.

[3]杨长春.Delphi程序设计教程[M].清华大学出版社,2003.

[4]DouglasRStinson.密码学原理与实践(第二版)[M].北京:电子工业出版社,2003.

[5]韩宝明,杜鹏,刘华.电子商务安全与支付[M].北京:人民邮电出版社,2001.

DES加密算法 篇5

DES即数据加密标准是Data Eneryption Standard的缩写,它是一种对称加密算法,也是一种分组密码。通过反复使用加密组块替代和换位两种技术,经过16轮的变换后得到密文,安全性较高。微软公司提供了DES公用密钥的加密类函数DES Crypto Service Provider(),在.NET开发系统中,利用Visual Studio编程平台,使用微软提供的加密类函数,我们可以自己编制自己的DES加密算法软件,从而可以方便地进行大文件的加密和解密,进而对文件的安全性进行游刃有余的自主控制。

2 文件的选择

首先对需要加密的文件进行选择,选择完之后,便可以对文件进行DES对称加密算法加密了。我们这里以PDF文件为例进行加密,其C#编程对话框如图1所示。

其PDF文件选择按钮代码如下:

3 文件的DES加密

选择好要加密的文件之后,在输入密码对话框中输入需要加密的密文,就可以对文件进行加密了:

在进行加密之后一定要把加密流以及文件的输入输出流给关闭,从而释放文件操作所占用的系统内存资源,以及避免文件有出现无法预料编译错误或其他结果。其中流的关闭代码如下:

对文件进行加密之后,所加密的PDF文件如果不进行解密的话,就不能正常打开,如果强行打开,那么就会出现如图2所示的错误提示。

所以只有对加密过的PDF文件进行解密,才能重新用PDF文件格式打开文件。

4 文件的DES解密

想要对加密的文件重新进行正常打开,必须对加密的文件进行DES对称解密,其解密代码如下所示。

在进行解密之后同样要把解密流以及文件的输入输出流给关闭,释放文件操作所占用的系统内存资源,这样操作才不会出现内存的泄露以及编译出现不可预知的结果。

5 结束语

DES对称加密及解密算法的Visual Studio C#实际编程应用,可灵活地对所要保护的文件进行加密,在一定程度上较好地解决了加密文件不被篡改、盗用等危害,并确保了PDF或其他格式文件的安全性。由于时间过长而忘记了加密文件的密码,可以通过编程软件对所加密文件的密文随时进行查看,然后输入密文进行解密,充分确保了文件的安全和有效。

参考文献

[1]周文婷,朱姣姣.DES加密算法的一种改进方法[J].计算机安全.2012.09:47-50.

[2]刘浩,李强.简明DES加密算法的实现[J].甘肃科技,2004.11v0120:60-62.

[3](德)侯姆,克鲁克,斯酱达著,薛兴涛,袁勤勇译.C#软件项目开发全程剖析[M].北京:清华大学出版社.

DES加密算法 篇6

1Huffman和S-DES混合加密算法与现有及传统加密算法的比较

文本加密技术是保障信息安全最基本、最核心的技术措施,主要通过对数据的加密和数字签名来实现。其中对数据的加密处理主要是为了防止数据不会被窃听。数据的加密方式有两种,一种是传统的对称密钥加密,就是加密方用一把密钥对数据进行加密,而解密方用同样一把密钥对数据进行解密。第二种是非对称密钥加密,如果使用这种算法,可以保证对发送方和接收方身份的确认。而数字签名实际上是由生成摘要和生成数字签名两部分构成。其中摘要可以防止文件被篡改,保证信息的完整性;而数字签名则是为了保障在商务活动中数据的不可否认性,从而使数据具有法律意义。

目前在文档安全管理市场上,加密可分为:文档格式转换加解密、核心层加解密、应用层加解密。常见的加密软件有:1) 记事本加密器Ncrypt TX,它预设了多种加密算法,包括DES、3DES、Rijndael、Polyalphabetic、ROT13、Vigenrre、Playfair等。当然不同的加密算法支持不同的数据编码格式,如Hex、Base64、Text、Word等。在工具栏中也可以相应地设置所需的密码。2) 超级密码本SuperCode有两个特色:第一是多重加密功能;第二是密码自动生成,通过创建密钥文件,摆脱记忆密码的烦恼。Super Code内置了Triple DES、DES、Rijndael、RC2等加密算法。Super Code的特点是允许你以上述加密算法为依据,自由组合,创建自己独有的加密算法序列,例如可以选择两种Triple DES算法,一种DES算法,三种RC2算法,五种Rijndael算法,而且可以灵活排列其先后顺序。

对称密钥密码系统,历史悠久,加/解密速度快是其优点,但因加密密钥与解密密钥为同一把密钥,信息的传送方如何在加密之后,将密钥以安全的方式传送给接收方,如何使双方能共享该密钥,是此密码系统的一大问题,因此,对称密钥密码系统不适合多人使用的应用。

非对称式加密就是加密和解密使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们必须配对使用,否则不能打开加密文件。“公钥”是指可以对外公布的,“私钥”则只能由持有人知道。它的优越性在于,对称式的加密方法如果是在网络上传输加密文件就很难把密钥告诉对方,不管用什么方法都有可能被别人窃听到,而非对称式加密方法有两个密钥,“公钥”可以公开,收件人解密时只要用自己的私钥即可,这样就很好地避免了密钥的传输安全性问题。

非对称式密码系统也称为“公开密钥密码系统”,它弥补了对称密钥密码系统的缺点,但运算速度较慢是公开密钥密码系统的缺点。

DES算法运算速度较慢,但在此基础上改进的S-DES算法,是一个对称分组加密的简化模型,有利于研究和实现,再结合Huff-man编码对文本信息进行压缩编码,即Huffman编码和S-DES算法相结合的混和加密算法就应运而生了。

2Huffman和S-DES加密算法原理分析

2.1 Huffman编码原理分析

哈夫曼编码是一种变长编码,是哈夫曼树的一个应用。哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。

哈夫曼编码根据字符出现的概率来构造平均长度最短的编码。在编码中,若各码字长度严格按照码字所对应符号出现概率的大小的逆序排序,则编码的平均长度是最小的。其中,码字是明文字符,是通过哈夫曼编码后得到的编码,其长度由明文中字符出现的概率决定,出现概率大的编码长度短,出现概率小的编码长度长。

哈夫曼编码对需要编码的数据进行两遍扫描:第一遍统计原数据中各字符出现的频率,利用得到的频率值创建哈夫曼树,并把树的信息保存起来,以便解压时创建同样的哈夫曼树进行解压;第二遍则根据第一遍扫描得到的哈夫曼树进行编码,并把编码后得到的码字存储起来。

哈夫曼编码的缺点:一、对于过短的文件进行编码的意义不大,因为存储哈夫曼树的信息就需要较大的存储空间;二、存储编码信息时,编码速度慢,效率低下。

2.2 S-DES算法分析

S-DES加密算法是以8位明文和10位密钥作为输出。其解密算法用同一密钥对8位密文分组产生原来的明文分组,如图1所示,它描述了S-DES的算法流程。

加密算法的数学表达式:IP-1*fk2*SW*fk1*IP,也可以写为:密文=IP-1(fk2(SW(fk1(IP(明文)))))。其中K1=P8(移位(P10(密钥K))),K2=P8(移位(移位(P10(密钥K))))。

解密算法的数学表示:明文=IP-1(fk1(SW(fk2(IP(密文)))))

S-DES加密算法涉及五个函数

1) 初始置换IP(initial permutation),,将8bit数按照IP函数进行移位;

2) 复杂函数fk1,它是依赖于子密钥K1,包含置换和替换的运算;

3) 置换函数SW,将8bit数的左4bit和右4bit交换位置;

4) 复杂函数fk2,它是依赖于子密钥K2,包含置换和替换的运算;

5) 初始置换IP的逆置换,将8bit数按照IP-1函数进行移位。

3Huffman和S-DES算法混合加/解密过程

3.1 混合加密过程

用数据流方式读入将要加密的文本文件信息,输入密钥并保存,经过第一次哈夫曼编码加密后转化为0/1字符串,在进行第二次加密之前要将0/1字符串分组,每8位一组,将其作为第二次加密S-DES算法的明文输入,经过S-DES算法得到最终的密文,将其保存到另一个TXT文本文件中。混合算法的加密过程如图2所示。

3.2 混合解密过程

解密过程首先要进行身份认证,输入密钥,身份认证成功后将进行解密,否则将不会解密。首先将最终的密文进行分组,每8位一组,经过S-DES算法进行第一次解密,得到0/1字符串,将其作为Huffman算法的编码进行第二次解密,即可得到最终的明文。其混合算法的解密过程如图3所示。

4 Huffman和S-DES混合算法的实现

4.1 Huffman编码的实现

Huffman算法主要涉及到5个核心函数,分别为获取权值数组GetWeightArray、构建哈夫曼树CreateHuffmanTree、创建哈夫曼编码字典CreateHuffmanDict、哈夫曼编码StringToHuffmanCode以及哈夫曼编码的解码ToHuffmanCode。

1)获取权值数组GetWeightArray(string str)

将文本信息中的每种字符出现的次数进行统计,并将其作为哈夫曼树的权值。

2)构建哈夫曼树Create Huffman Tree(Node[] sources)

按“左走0,右走1”的原则创建哈夫曼树。

3)创建哈夫曼编码字典Create Huffman Dict(Node h Tree)

创建哈夫曼编码字典,在数组中实现“左走0,右走1”。

4)哈夫曼编码String To Huffman Code(out Dictionary<char, string> key, string str)

由创建的哈夫曼树,得到哈夫曼编码。

5)哈夫曼编码的解码To Huffman Code(string source, Dictionary<char, string> hfdict)

将哈夫曼编码还原成哈夫曼树,得到每个字符出现的次数,将其还原成原文本信息。

4.2 S-DES算法的实现

S-DES算法中涉及的核心算法为P10置换;P8置换;IP函数;FK函数;SW函数;IP-1函数。

1)P10置换p10(string miyao)

2)P8置换p8(stringls1, string ls2)

3)IP函数IP(stringmingwen)

mingwen = mingwen + numbers[1] + numbers[5] + numbers[2] + numbers[0] + numbers[3] + numbers[7] + numbers[4] + numbers[6];

4)FK函数fk(stringmingwen, string key)

5)SW函数sw(string mingwen)

mingwen = mingwen + numbers[4] + numbers[5] + numbers[6] + numbers[7] + numbers[0] + numbers[1] + numbers[2] + numbers[3];

6)IP-1函数NIP(string mingwen)

mingwen = mingwen + numbers[3] + numbers[0] + numbers[2] + numbers[4] + numbers[6] + numbers[1] + numbers[7] + numbers[5];

5 结束语

该混和加密算法结合了Huffman算法的平均最短编码和S-DES算法的分组加密,能对文本信息进行有效的加密,由于加密的过程是由两次加密算法混合组成,所以增强了密文的安全性。

但Huffman算法在统计文本信息中字符出现的次数,并将该次数作为权值时,降低了程序的运行效率。且S-DES算法每次运算8bit数,增加了循环次数,也降低了程序的运行效率。

本文主要是对TXT文件中的字符进行混合加密,对于其他各种文件,如二进制文件等,虽然能够进行有效的加密,但是其安全性和运行效率无法估计,这也是后续研究中应该加以改善的。

摘要:在对比现有的加密软件和古典密码学常见的加密算法后,结合文本加密的现状及发展趋势,该文将基于动态Huffman编码和S-DES算法相结合,弥补两者的缺点,达到对文本信息的最佳加密及解密效果。

DES数据加密的FPGA实现 篇7

1 DES加密算法原理

DES算法是在64位密钥控制下由64位数据组成的加密和解密块。解密必须与加密使用相同的密钥,解密过程是加密过程的逆过程。要加密的块首先经过初始IP变换,然后经过复杂的密钥函数计算,最后经过初始变换的IP-1逆变换。加密结构如图1所示。具体的加密过程如下:

64位数据的明文输入后经过IP表初始置换后输出64位的数据。将初始变换后的64位明文分为两部分L和R,长度分别为32位,然后数据通过如图2所示的n轮的处理。每一轮的输入Li-1和Ri-1都来自上一轮的输出,子密钥K由初始密钥K扩展而来。每一轮变化的结构都完全相同。左边一半数据需要执行一次置换操作。而右边一半数据执行一次“轮函数F”,然后与左边一半数据进行异或,最后再将数据的两个部分交换。即

经过16轮后,得到L16和R16,将两部分合起来后,最后再进行初始变换的逆变换,即得到所需的密文。

2 子密钥生成

子密钥的生成流程图如图3所示。

输入的64位密钥经过PC-1变换为56位。然后将此56位密钥平分成分别为28位的C0和D0,将C0和D0分别循环左移一位得到C1和D2,将C1和D1合在一起,再经过PC-2变换,得到子密钥K1,之后再将C1和D1分别循环左移,得到C2和D2,再将C2和D2合在一起,再经过PC-2变换,得到子密钥K2,依此类推,将Ci-1和Di-1分别循环左移,得到Ci和Di,再将Ci和Di合在一起,再经过表PC-2变换,得到48位的子密钥Ki,共经过16次迭代,分别得到每次的子密钥Ki(i=1~16)。子密钥生成的代码示意如下:

在进行循环左移时,每次左移的位数都不一样,左移次数和迭代次数如表1所示。

移位实现代码如下所示:

3 轮函数F计算

F函数的计算过程如图4所示,将32位的数据经过E表扩展置换后形成48位的数据,然后与各轮的子密钥异或,然后通过S盒的非线性变换,S盒共有8个,将48位数据分成8个6位b1b2b3b4b5b6数据,以b1b6为行号,b2b3b4b5b6为列号,输入给每个S盒,分别输出4位数据。这样将F函数扩展出来的48位数据减少为下一轮需要的32位数据。

S盒的置换算法可采用非ROM方式[4]和ROM方式[5]实现,本文使用ROM方式实现,即如下的第4种。具体有以下几种:

1)根据S盒的工作原理,可直接使用输入为六变量,输出为四变量的case语句进行描述,构成一个4位26个存储空间的表。然而这样的语句虽然可读性很强,但综合的效率往往不高,占用资源过多,速度也比较低,使S盒成为系统速度的瓶颈。

2)为了利用FPGA内部的四输入查找表结构,可将S盒的逻辑描述进行重新设计,即先固定2个变量,而使另外4个变量发生变化。在实现时使用双重case语句,外层使用两个变量,对应S盒输入的第1、6位。内层使用4个变量,对应S盒输入的第2、3、4、5位,形成一个6输入、4输出的查找表。该方案可充分利用FPGA的内部资源,提高综合效率,加快算法执行速度。

3)另一种方法就是根据S盒列出每位输出的真值表,用卡诺图进行化简,得到每一位输出的逻辑表达式,再用VHDL语言进行描述。为了节省资源,化简时应考虑多个输出函数之间的乘积项共用问题。采用该方案实现的S盒在资源利用率和速度的提升上都有很大的改进。

4)首先将48位输入分为8组,每组6位。然后用这6位数据查找一个6输入的置换表,该置换表就称为S盒。在实现过程中用一个只读存储器(ROM)来存储所有的置换模式。置换模块将块索引和输入数据结合起来构成一个地址,用来查找S盒中相应的置换值。地址的计算由函数smap执行,这样在置换函数中,分别调用8次smap函数执行8次置换。为了优化数据路径,可将S盒分成8个更小的ROM,这样可以并行访问。置换函数如下所示:

4 仿真结果

DES加密的芯片设计采用VHDL语言进行描述,代码包含des_ip、des_ip_1、key_pc_1、des_e、key_pc_2、des_p共6个部件以及key_rotate和substitute两个函数,依次分别完成初始变换、最终逆变换、64位密钥到56位的压缩转换、32位到48位的压缩置换、48位到56位的置换、32位到32位的变换以及子密钥的移位运算和S盒轮函数运算。代码在Quartus II开发环境中编译完成,以Altera公司Cyclone EP1C12F324C6为目标器件,逻辑综合结果表明系统共占用3968个逻辑单元(LE)。

假设需要加密的明文分别为4E6F772069732074、68652074696D6520、666F7220616C6C20,所用密钥为0123456789ABCDEF,经过初始置换,16轮迭代加密,逆初始置换,最终的加密密文分别为:3FA40E8A984D4815、6A271787AB8883F9、893D51EC4B563B53,其时序仿真结果如图5所示,仿真结果表明,系统完全实现DES算法的加密功能。

摘要:文章对DES加密算法进行了详细的分析,给出了采用VHDL描述基于FPGA实现DES加密算法系统的设计过程和仿真结果。该算法在密钥生成、S盒的处理中采用了并行处理的方式,克服了传统DES流水线实现方式的缺点,进一步提高了系统的处理速度。

关键词:DES数据加密标准,FPGA,VHDL

参考文献

[1]FIPS 46-3.Data Encryption Standard(DES),National Institute of Standards and Technology(NIST)[S/OL].http://csrc.nist.gov/cryptval/des.htm.

[2]肖新帅,刘洪鹏.基于FPGA的DES算法的并行加密技术[J].科技信息,2010(25).

[3]Biham E.A fast new DES implementation in software[EB/OL].http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.52.5429&rep=rep1&type=pdf.

[4]王简瑜,张鲁国.基于FPGA实现DES算法的性能分析[J].微计算机信息,2007,23(8).

上一篇:本原问题下一篇:支架预压