安全体系(一)—— DES算法详解

  本文主要介绍了DES算法的步骤,包括IP置换、密钥置换、E扩展置换、S盒代替、P盒置换和末置换。

  安全体系(零)—— 加解密算法、消息摘要、消息认证技术、数字签名与公钥证书

  安全体系(二)——RSA算法详解

安全体系(三)——SHA1算法详解

1.DES算法简介

  DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准。

  DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。

  密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1),分组后的明文组和56位的密钥按位替代或交换的方法形成密文组。

  DES算法的主要流程如下图所示,本文按照流程依次介绍每个模块。

2.IP置换

  IP置换目的是将输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位。

  置换规则如下表所示:


58


50


42


34


26


18


10


2


60


52


44


36


28


20


12


4


62


54


46


38


30


22


14


6


64


56


48


40


32


24


16


8


57


49


41


33


25


17


9


1


59


51


43


35


27


19


11


3


61


53


45


37


29


21


13


5


63


55


47


39


31


23


15


7

  表中的数字代表原数据中此位置的数据在新数据中的位置,即原数据块的第1位放到新数据的第58位,第2位放到第50位,……依此类推,第64位放到第7位。置换后的数据分为L0和R0两部分,L0为新数据的左32位,R0为新数据的右32位。

  设转换前的数据位D1D2D3…D64,则IP置换后的结果为L0=D58D50…D8,R0=D57D49…D7。0x0000 0080 0000 0002转换后的结果为0x0002 0000 0000 0001,且L0=0x0002 0000,R0=0x0000 0001。置换步骤如下:

  原数据第33位为1,置换表第33位为64,因此将1放到新数据的第64位;原数据第63位为1,置换表第63位为7,因此将1放到新数据的第7位;其余值为0的位按此置换。要注意一点,位数是从左边开始数的,即最0x0000 0080 0000 0002最左边的位为1,最右边的位为64。

3.密钥置换

  不考虑每个字节的第8位,DES的密钥由64位减至56位,每个字节的第8位作为奇偶校验位。产生的56位密钥由下表生成(注意表中没有8,16,24,32,40,48,56和64这8位):


57


49


41


33


25


17


9


1


58


50


42


34


26


18


10


2


59


51


43


35


27


19


11


3


60


52


44


36


63


55


47


39


31


23


15


7


62


54


46


38


30


22


14


6


61


53


45


37


29


21


13


5


28


20


12


4

  在DES的每一轮中,从56位密钥产生出不同的48位子密钥,确定这些子密钥的方式如下:

  1).将56位的密钥分成两部分,每部分28位。

  2).根据轮数,这两部分分别循环左移1位或2位。每轮移动的位数如下表:


轮数


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

  移动后,从56位中选出48位。这个过程中,既置换了每位的顺序,又选择了子密钥,因此称为压缩置换。压缩置换规则如下表(注意表中没有9,18,22,25,35,38,43和54这8位):


14


17


11


24


1


5


3


28


15


6


21


10


23


19


12


4


26


8


16


7


27


20


13


2


41


52


31


37


47


55


30


40


51


45


33


48


44


49


39


56


34


53


46


42


50


36


29


32

置换方法同上,此处省略。

4.E扩展置换

  扩展置置换目标是IP置换后获得的右半部分R0,将32位输入扩展为48位(分为4位×8组)输出。

  扩展置换目的有两个:生成与密钥相同长度的数据以进行异或运算;提供更长的结果,在后续的替代运算中可以进行压缩。

  扩展置换原理如下表:


32


1


2


3


4


5


4


5


6


7


8


9


8


9


10


11


12


13


12


13


14


15


16


17


16


17


18


19


20


21


20


21


22


23


24


25


24


25


26


27


28


29


28


29


30


31


32


1

  表中的数字代表位,两列黄色数据是扩展的数据,可以看出,扩展的数据是从相邻两组分别取靠近的一位,4位变为6位。靠近32位的位为1,靠近1位的位为32。表中第二行的4取自上组中的末位,9取自下组中的首位。

  我们举个例子看一下(虽然扩展置换针对的是上步IP置换中的R0,但为便于观察扩展,这里不取R0举例):

  输入数据0x1081 1001,转换为二进制就是0001 0000 1000 0001B,按照上表扩展得下表


1


0


0


0


1


0


1


0


0


0


0


1


0


1


0


0


0


0


0


0


0


0


1


0


1


0


0


0


1


0


1


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


1


0

  表中的黄色数据是从临近的上下组取得的,二进制为1000 1010 0001 0100 0000 0010 1000 1010 0000 0000 0000 0010B,转换为十六进制0x8A14 028A 0002。

扩展置换之后,右半部分数据R0变为48位,与密钥置换得到的轮密钥进行异或。

5.S盒代替

  压缩后的密钥与扩展分组异或以后得到48位的数据,将这个数据送人S盒,进行替代运算。替代由8个不同的S盒完成,每个S盒有6位输入4位输出。48位输入分为8个6位的分组,一个分组对应一个S盒,对应的S盒对各组进行代替操作。

  一个S盒就是一个4行16列的表,盒中的每一项都是一个4位的数。S盒的6个输入确定了其对应的输出在哪一行哪一列,输入的高低两位做为行数H,中间四位做为列数L,在S-BOX中查找第H行L列对应的数据(<32)。

  8个S盒如下:

  S盒1


14


4


13


1


2


15


11


8


3


10


6


12


5


9


0


7


0


15


7


4


14


2


13


1


10


6


12


11


9


5


3


8


4


1


14


8


13


6


2


11


15


12


9


7


3


10


5


0


15


12


8


2


4


9


1


7


5


11


3


14


10


0


6


13

  S盒2


15


1


8


14


6


11


3


4


9


7


2


13


12


0


5


10


3


13


4


7


15


2


8


14


12


0


1


10


6


9


11


5


0


14


7


11


10


4


13


1


5


8


12


6


9


3


2


15


13


8


10


1


3


15


4


2


11


6


7


12


0


5


14


9

  S盒3


10


0


9


14


6


3


15


5


1


13


12


7


11


4


2


8


13


7


0


9


3


4


6


10


2


8


5


14


12


11


15


1


13


6


4


9


8


15


3


0


11


1


2


12


5


10


14


7


1


10


13


0


6


9


8


7


4


15


14


3


11


5


2


12

  S盒4


7


13


14


3


0


6


9


10


1


2


8


5


11


12


4


15


13


8


11


5


6


15


0


3


4


7


2


12


1


10


14


19


10


6


9


0


12


11


7


13


15


1


3


14


5


2


8


4


3


15


0


6


10


1


13


8


9


4


5


11


12


7


2


14

  S盒5


2


12


4


1


7


10


11


6


5


8


3


15


13


0


14


9


14


11


2


12


4


7


13


1


5


0


15


13


3


9


8


6


4


2


1


11


10


13


7


8


15


9


12


5


6


3


0


14


11


8


12


7


1


14


2


13


6


15


0


9


10


4


5


3

  S盒6


12


1


10


15


9


2


6


8


0


13


3


4


14


7


5


11


10


15


4


2


7


12


9


5


6


1


13


14


0


11


3


8


9


14


15


5


2


8


12


3


7


0


4


10


1


13


11


6


4


3


2


12


9


5


15


10


11


14


1


7


6


0


8


13

  S盒7


4


11


2


14


15


0


8


13


3


12


9


7


5


10


6


1


13


0


11


7


4


9


1


10


14


3


5


12


2


15


8


6


1


4


11


13


12


3


7


14


10


15


6


8


0


5


9


2


6


11


13


8


1


4


10


7


9


5


0


15


14


2


3


12

  S盒8


13


2


8


4


6


15


11


1


10


9


3


14


5


0


12


7


1


15


13


8


10


3


7


4


12


5


6


11


0


14


9


2


7


11


4


1


9


12


14


2


0


6


10


13


15


3


5


8


2


1


14


7


4


10


8


13


15


12


9


0


3


5


6


11

  例如,假设S盒8的输入为110011,第1位和第6位组合为11,对应于S盒8的第3行;第2位到第5位为1001,对应于S盒8的第9列。S盒8的第3行第9列的数字为12,因此用1100来代替110011。注意,S盒的行列计数都是从0开始。

  代替过程产生8个4位的分组,组合在一起形成32位数据。

S盒代替时DES算法的关键步骤,所有的其他的运算都是线性的,易于分析,而S盒是非线性的,相比于其他步骤,提供了更好安全性。

6.P盒置换

  S盒代替运算的32位输出按照P盒进行置换。该置换把输入的每位映射到输出位,任何一位不能被映射两次,也不能被略去,映射规则如下表:


16


7


20


21


29


12


28


17


1


15


23


26


5


18


31


10


2


8


24


14


32


27


3


9


19


13


30


6


22


11


4


25

  表中的数字代表原数据中此位置的数据在新数据中的位置,即原数据块的第16位放到新数据的第1位,第7位放到第2位,……依此类推,第25位放到第32位。

  例如0x10A1 0001进行P盒置换后变为0x8000 0886。

  0x10A1 0001表现为表的形式(第一位位于左上角)原来为


0


0


0


1


0


0


0


0


1


0


1


0


0


0


0


1


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


1

  经P盒变换后为


1


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


1


0


0


0


1


0


0


0


0


1


1


0

  即1000 0000 0000 0000 0000 1000 1000 0110B,十六进制为0x8000 0886。

  最后,P盒置换的结果与最初的64位分组左半部分L0异或,然后左、右半部分交换,接着开始另一轮。

7.IP-1末置换

  末置换是初始置换的逆过程,DES最后一轮后,左、右两半部分并未进行交换,而是两部分合并形成一个分组做为末置换的输入。末置换规则如下表:


40


8


48


16


56


24


64


32


39


7


47


15


55


23


63


31


38


6


46


14


54


22


62


30


37


5


45


13


53


21


61


29


36


4


44


12


52


20


60


28


35


3


43


11


51


19


59


27


34


2


42


10


50


18


58


26


33


1


41


9


49


17


57


25

  置换方法同上,此处省略。

  经过以上步骤,就可以得到密文了。

时间: 2024-08-21 21:50:21

安全体系(一)—— DES算法详解的相关文章

DES算法详解

本文主要介绍了DES算法的步骤,包括IP置换.密钥置换.E扩展置换.S盒代替.P盒置换和末置换. 1.DES算法简介 DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准. DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法. 密钥长64位,密钥事实上是56位参与DES运算(第8.16.24.32.40.48.56.64位是校验位,使得每个密钥都有奇数个1),分组后的明文组和56位的密钥按位替代或交换的方法形成密文组. DES算法的主要流程如下图

DES算法详解与源码

网上关于DES算法的讲述有很多,大致思路一致.但是很多细节的处理上没有交代清楚,源码质量也参差不齐,为此也花了很多时间研究了一下,现在把完整思路和源码整理如下. 1. DES算法简介: DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法. 明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8.16.24.32.40.48.56.64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或

安全体系(三)——SHA1算法详解

本文主要讲述使用SHA1算法计算信息摘要的过程. 安全体系(零)—— 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(一)—— DES算法详解 安全体系(二)——RSA算法详解 为保证传输信息的安全,除了对信息加密外,还需要对信息进行认证.认证的目的有两:一是验证信息的发送者是合法的,二是验证信息的完整性.Hash函数就是进行信息认证的一种有效手段. 1.Hash函数和消息完整性 Hash函数也称为杂凑函数或散列函数,函数输入为一可变长度x,输出为一固定长度串,该串被称为输入x

安全体系(二)——RSA算法详解

本文主要讲述RSA算法使用的基本数学知识.秘钥的计算过程以及加密和解密的过程. 安全体系(零)—— 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(一)—— DES算法详解 1.概述 RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年首次公布,当时他们三人都在麻省理工学院工作.RSA算法以他们三人姓氏开头字母命名. RSA是目前最有影响力的公钥加密

DES加密算法详解- -

DES加密算法详解- - 对加密解密一直挺喜欢的,可还是没有怎么好好学习过,希望这是一个好的开始. 在网上搜了一下关于DES的说明,发现有些杂乱,所以还是有必要整合一下. 写了一点代码,还没有完成,不过,还不能编译通过,^_^ 刚看了一下,发现还是说得够模糊的,有机会再整理一下. 昏倒,一直运行不对,今天才仔细查出来,原来问题是出在Des_Data_P(const_b32& input, _b32 output), 我的output用了传值调用,失败呀.应该是Des_Data_P(const _

Android 数据加密算法 Des,Base64详解

一,DES加密: 首先网上搜索了一个DES加密算法工具类: import java.security.*;import javax.crypto.*; public class DesHelper { private static String strDefaultKey = "national";          private Cipher encryptCipher = null;          private Cipher decryptCipher = null;  

EM算法(3):EM算法详解

目录 EM算法(1):K-means 算法 EM算法(2):GMM训练算法 EM算法(3):EM算法详解

[转] KMP算法详解

转载自:http://www.matrix67.com/blog/archives/115 KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段.    我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法.KMP算法是拿来处理字符串匹配的.换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串).比如,字符串A="I'm matrix67",字符串B="matrix",我们就说B是A的子串.

[搜索]波特词干(Porter Streamming)提取算法详解(3)

 接上 [搜索]波特词干(Porter Streamming)提取算法详解(2) 下面分为5大步骤来使用前面提到的替换条件来进行词干提取. 左边是规则,右边是提取成功或者失败的例子(用小写字母表示). 步骤1 SSES -> SS                   caresses  ->  caress IES  -> I                          ponies    ->  poni ties      ->  ti SS   -> S