DES加密算法的Java实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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-盒置换