DES加密算法的Java实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息安全概论JAVA实现DES加密算法

学号:********* 姓名:高玉林

Java实现DES加密算法

目录

DES算法概述 (3)

DES的加密过程 (4)

DES算法细节 (4)

DES的解密过程 (8)

源代码与结果(使用Java实现) (9)

源代码 (9)

运行结果截图 (21)

默认密钥(“这不是密码”) (21)

用户自定义密钥(以“nuaasillydes”为例) (21)

总结 (22)

DES算法概述

DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。它是ANSI的数据加密算法和ISO的DEA-1,成为一个世界范围内的标准已经近30年。尽管DES带有过去时代的特征,但是它很好的抵抗住了多年的密码分析,除可能的最强有力的敌手外,对其他的攻击仍是安全的。

DES是一个分组加密算法,它以64位为一组对数据进行加密。64位一组的明文从算法的一端输入,64位的密文从另一端输出。DES是一个对称算法:加密与解密用的是同一算法(除密钥编排不同以外)。密钥的长度为56位,通常表示为64位的数,但是每个第八位都用作奇偶校验,可以忽略。密钥可以是任意的56位的数,且可在任意的时候改变。DES的整体结构为:

DES的加密过程

DES的加密过程如下。

(1)64位的密钥经子密钥产生算法产生出16个子密钥K1,K2,……,K16,分别供第1

次,第2次,……,第16次加密迭代使用。

(2)64位明文首先经过初始置换IP(Initial Permutation),将数据打乱重新排列并分

成左右两半。左边32位构成L,右边32为构成R。

(3)由加密函数f实现子密钥k1对R0的加密,结果得到32位的数据组f(R0,K1)。

F(R0,K1)再与L0异或,又得到一个32位的数据组L0➕f(R0,K1)。以L0➕f(R0,K1)作为第

2次加密迭代的R1,以R0作为第2次加密迭代的L1。至此,第1次加密迭代结束。

(4)第2次加密迭代至第16次加密迭代分别用子密钥K1,K2,……,K16进行,其过程

与第1次加密过程相同。

(5)第16次加密迭代后,左右部分并未交换,而是将R16与L16并在一起形成一

个分组作为末置换(逆初始置换IP-1)的输入,将数据重新排列,便得到64位明文。

至此,加密过程全部结束。

综上,可将DES的加密过程用如下的数学表达式描述:

L i=R i-1

R i=L i-1➕f(R i-1,K i),其中i=1,2,3,……,16,➕表示异或

DES算法细节

1.子密钥的产生

64位密钥经过密钥置换、循环左移、压缩置换等变换,产生16个子密钥。子密

钥的产生过程如图所示,其中产生每一个子密钥所需的循环左移位数在表中给出。

1)密钥置换

64位的密钥分为8个字节,每个字节的前7位是真正的密钥位,而第8位是

奇偶校检位。置换选择1的矩阵在表2中给出

2)压缩置换

选择出一个48位的子密钥K i。

2.初始置换IP

初始置换IP是Des的第一步密码转换。初始置换的作用在于将64位的明文打

乱重排,并分成左右两半。左边32位作为L0,右边32位作为R0,供后面的加

密迭代使用。初始置换IP的矩阵在表4中给出。

表4 初始置换

3.加密函数

加密函数是DES的核心部分。它的作用是在第i轮加密迭代中用子密钥K i对R i-1

进行加密。

1)扩展置换E

在第i轮迭代加密中扩展置换E对32位的R i-1的各位进行选择和排列,产生一

个48位的结果。这个操作的目的有两个方面:①产生了与密钥同长度的数据以

进行异或运算②提供了更长的结果,使得在替代1运算时能进行压缩。扩展置换

E的矩阵在表5中给出。

表5 扩展置换E

1

2)S-盒代替

压缩后的密钥与扩展分组异或之后,将48位的结果送入,进行代替运算。替代由8个代替盒(Substitution Box)完成。每个S-盒都有6位输入,4位输出,且这8个S-盒是不同的。DES的48位输入被分为8个6位的分组,每一分租对应一个S-盒代替操作:分组1由S-1操作。分组2由S-2操作,如此等等。

表6列出了所有的8个S-盒。

S1:

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,

S2:

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,

S3:

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,

S4:

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,9,

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,

S5:

2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,

14,11,2,12,4,7,13,1,5,0,15,10,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,

S6:

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,

S7:

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,

S8:

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-盒的项。假定将S-盒的6位的输入标记为b1,b2,b3,b4,b5,b6,则b1和b6组合构成了一个2位的数,从0到3(二进制),它对应着表中的一行。从b2到b5构成了一个4位的数,从0到15(二进制),对应表中的一列。得到对应S-盒的数,转换成二进制即得到输出的替代值。

3)P-盒置换

S-盒代替运算后的32位输出依照P-盒进行置换。该置换把每一位输入位映射到输出位,任一位不能被映射两次,也不能被略去。表7给出了每位移至的位置。

表7 P-盒置换

相关文档
最新文档