一、介绍
DES算法全称Data Encryption Standard,即数据加密标准,是一种对称加密算法。也许你更早接触到的是RSA算法——非对称加密算法的代表,它的一个典型应用是在ssh无密码登录中生成一对公钥、私钥。但是,RSA算法有一个致命缺点:处理速度很慢,因此只适合加密安全性要求极高而又较短的信息。相比之下,DES处理速度则快多了,可用于加密信息比较长的场合。
而且,通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这也正是现在金融交易网络的流行做法。目前,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。
DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。DES算法把64位的明文输入块转变为64位的密文输出块,它所使用的密钥也是64位。
二、DES加密原理图
分组加密
DES加密过程总览
子密钥生成过程
DES加密过程
三、DES加密详解
1、获取子密钥Ki(一共16个)
DES的初始密钥K为64位,按8行8列从左往右从上往下排列,其中每行第8位用于奇偶校验,因此Key实际可用位数为56。
首先,64位的初始密钥K经过PC-1之后,生成56位的串。
由表可知,初始密钥K第8、16、24、32、40、48、56、64共8个校验位被去掉,剩余56位按表所示方式排列:第57位放在第1位,第49位放在第2位,依次类推。
经过PC-1置换之后,将置换输出再分为前28位C0和后28位D0两部分,分别循环左移1位得到C1和D1,然后将两部分合并成56位,然后经过PC-2变换之后生成48位的子密钥K1。
C1、D1分别循环左移1位得到C2、D2,合并经过PC-2生成子密钥K2。依次类推,直至生成子密钥K16。注意,每轮循环左移的位数有如下规定:
至此,加密过程需要的16个子密钥全部生成完毕,下面我们来看具体如何加密。
2、加密过程
2.1 初始置换
64位明文串经过一个初始置换函数IP,生成重新排列之后的64位输出,分为左32位L0和右32位R0,用于F函数16轮迭代运算的首次迭代的初始输入。
2.2 迭代运算
R0与子密钥K1经过密码函数变换F(R0,K1)得到32位输出f1,f1与L0做二进制异或运算,结果赋给R1,R0则原封不动地赋给L1。然后R1与子密钥K2经过函数变换F(R1,K2)得到32位输出f2,f2与L1做二进制异或运算,结果赋给R2,R1则原封不动地赋给L2....依此类推,一共经过16次迭代运算直至最后生成L16和R16。
2.3 末置换
L16、R16合在一起64位,经过末置换函数IP-1,得到64位密文输出。
3、密码函数F
密码函数F接受两个输入:32位数据和48位子密钥,输出结果为32位。具体运算如下:
3.1 扩展置换
32位数据通过扩展置换E从32位扩展为48位,扩展置换通过将原32位数据中的某些位重复出现达到扩展的目的。
3.2 异或运算
扩展置换的输出(48位)与子密钥(48位)做异或运算,输出为48位。
3.3 S盒置换
将异或运算得到的48位结果数据分成8个6位的块,每块通过对应的一个S盒产生一个4位的输出。8个6位数据的置换结果连在一起,形成32位输出结果。
每个S盒实际上是一张4(0-3)行16(0-15)列的置换表,注意,行列编号都从0开始。
S盒接收6位的数据,经过置换输出4位的数据,其具体置换过程为:将6位数据的第1位和第6位取出来,形成一个2位的二进制数x(从0-3),剩下的4位构成另一个二进制数y(从0-15),然后查出S盒x行y列对应的十进制整数,将该整数转换为一个4位二进制数,即为S盒的输出。
3.4 P盒置换
S盒置换的最终结果32位数据通过P盒置换,同样生成32位输出结果。
参考文献:http://baike.baidu.com/view/584868.htm?fr=aladdin
http://simplesource.blog.163.com/blog/static/103414062007221112947879/
http://wenku.baidu.com/link?url=Dw7UUpR5m3N6Ioht5IauMkAgONqxhKdLfq_RKo7DrkZx_2HT7bXyfriZdnBE2BPV9KPManidU3DYSU_ir0g2zKUvIbO4NPkY5IC4OZd8y
相关推荐
DES 加密算法原理 在密码学领域中,DES(Data Encryption Standard)是一种对称加密算法,广泛应用于数据加密和解密。下面是对 DES 加密算法原理的详细解释。 分组密码的原理 在密码学中,分组密码是一种常用的...
总结来说,DES加密算法是一种重要的对称加密技术,虽然因为其相对较短的密钥长度(56位)而逐渐被更安全的算法如AES所取代,但它在密码学教育和理解加密原理方面仍具有重要价值。C语言实现的DES算法源码可以帮助我们...
DES加密算法实验原理
### DES加密算法实验知识点 #### 一、实验背景与目的 **DES(Data Encryption Standard)加密算法**是一种经典的对称加密技术,在信息安全领域占据着重要地位。本实验旨在通过实践操作,加深对DES算法工作原理的...
实验原理 DES 是一种分组加密算法,每次加密或解密的分组大小均为 64 位,所以 DES 没有密文扩大的问题。 在 DES 加密算法中,对大于 64 位的明文只要按每 64 位一组进展切割,而对小于 64 位的明文只要在后面补“0...
在本文中,我们将深入探讨DES加密算法的原理、C语言实现及其相关知识点。 DES算法基于Feistel网络结构,它将明文分为左半部分和右半部分,然后通过一系列迭代过程进行加密。每个迭代包含以下步骤: 1. **初始置换...
DES加密算法源码 DES加密算法源码 DES加密算法源码 DES加密算法源码 DES加密算法源码 DES加密算法源码 DES加密算法源码 DES加密算法源码 DES加密算法源码 DES加密算法源码 DES加密算法源码 DES加密算法源码DES加密...
总的来说,DES加密算法是计算机科学中对称加密的经典例子,虽然在现代已不再作为主要加密标准,但它仍然是理解加密原理和学习密码学的重要教材。通过C++实现DES,不仅可以提升编程技能,还能增强对信息安全的理解。
**Qt DES加密算法展示程序详解** Qt是一个跨平台的C++图形用户界面应用程序开发框架,它为开发者提供了丰富的工具和库,使得构建GUI应用变得容易。在这个“Qt写的DES加密算法展示程序”中,我们将深入探讨DES(Data...
在C++中实现DES加密算法,通常涉及到以下几个关键知识点: 1. **DES算法原理**:DES算法基于Feistel结构,通过16轮迭代变换将64位明文数据转化为64位密文。每一轮迭代包含一个子密钥生成过程和一个替换-置换过程。...
DES(Data Encryption ...总结来说,DES加密算法是历史上重要且有影响力的加密技术,虽然现在已被更先进的算法所取代,但它在密码学的发展历程中起到了关键作用,并且对于理解和学习现代加密技术的基础至关重要。
C#实现AES与DES加密算法 本资源提供了C#语言实现AES与DES加密算法的示例代码,包括加密和解密函数的实现。AES(Advanced Encryption Standard,高级加密标准)和DES(Data Encryption Standard,数据加密标准)都是...
本篇文章将深入探讨DES加密算法的应用及其在Java编程中的实现。 DES算法由IBM公司在1970年代初设计,后来被美国国家标准局采纳为数据加密标准。该算法基于Feistel结构,使用64位的密钥对64位的数据进行加密,实际...
DES加密算法软件下载DES加密算法软件下载美国国家标准局1973年开始研究除国防部外的其它部门的计算机系统的 数据加密标准,于1973年5月15日和1974年8月27日先后两次向公众发出了 征求加密算法的公 告。加密算法要...
C语言实现DES算法DES加密算法实验报告.doc
des算法 【DES加密算法技术文档】详解DES加密算法的原理与Java实现
DES 算法加密算法解密算法 DES 算法概述 DES(Data Encryption Standard)是一种对称密钥块加密算法,由美国 IBM 公司的 W. Tuchman 和 C. Meyer 于 1971-1972 年研制成功。1973 年,美国国家标准局(NBS)公开...
该论文对 DES 加密算法的原理进行了详细的介绍和分析,并对其应用进行了研究和实现。 知识点一:DES 加密算法的分类与发展 * DES 加密算法是对称密钥加密算法的一种,使用相同的密钥进行加密和解密。 * DES 加密...