DES算法实现
实验需求
算法原理
DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。 明文按64位进行分组,**长64位,**事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个**都有奇数个1)分组后的明文组和56位的**按位替代或交换的方法形成密文组的加密方法。
总体结构
-
求子钥K1–K16
K –> 置换得K+ –> 得C0,D0 –> 左移求C1D1–C16D16 –> 置换得K1–K16 -
利用子钥求L16R16
(1)M–> 置换得M+ –> 得L0,R0(2)进入16次循环:
Rn拓展置换(32->48)–> 结果异或Kn+1 –> 异或后结果进入S盒(48->32)–> S盒输出进行P置换 –> 结果异或Ln –> 结果赋给Rn+1,Ln+1 = Rn(3)得到L1R1–L16R16
-
生成密文
L16R16 –> R16L16 –>位置交换表置换得密文 -
解密过程
解密过程基本与加密过程相同,不过,加密利用子钥的顺序为K1—K16,解密过程利用子钥的顺序为K16—K1。
模块分析
求子钥K1–K16
- 将**KEY(64位)转换成8*8矩阵便于后续计算
- 舍弃奇偶校验位得8*7矩阵K
- 通过8*7的交换规则表(perm_key),输入矩阵K,输出结果K+
- 将K+(8*7),上下分解为C0,D0(4*7)两个矩阵
- 根据下表,在每一轮Cn,Dn被赋值为Cn-1左移x位后的结果。重复16次得C1D1 – C16D16
- Kn = CnDn(n = 1,2,……,16)
- 通过8*6的交换规则表(perm_K),输入矩阵Kn(n = 1,2,……,16),输出结果Kn+(n = 1,2,……,16)
- 子钥为Kn+(n = 1,2,……,16)
求L16R16
- 将**M(64位)转换成8*8矩阵便于后续计算
- 通过8*8的交换规则表(perm_ip),输入矩阵M,输出结果M+
- 将M+(8*8),上下分解为L0,R0(4*8)两个矩阵
- 进入循环,循环次数为16,(n = 1,2,……,16):
(1)通过6*8的交换规则表(perm_R),输入矩阵Rn(8*4),输出结果Rn+(8*6)
(2)Rn+ = R+ 异或 Kn+1(子钥)
(3)通过4*16的S盒(perm_S),输入矩阵Rn+(8*6),输出结果Rn+(8*4)。
S盒具体规则如下:
① 对于矩阵Rn+(8*6),每一行6个为一组,共8组。
② 针对每组的6位数,每组中第一位和最后一位组成的二进制代表S盒行数,中间4位组成的数代表列数。
③根据行数列数,对应相应组数的S盒中的十进制数
④将十进制数转为4位二进制数,替代该组中原6位二进制数
(4)通过8*4的P盒(perm_P),输入矩阵Rn+,输出结果Rn+
(5)Rn+ = Rn+ 异或Ln
(6)Rn+1 = Rn+ Ln+1 = Rn - 经过16次循环得,L16、R16
生成密文
- 将R16(8*4)、L16(8*4),合并成LR(8*8)
- 通过8*8的交换规则表(perm_LR),输入矩阵LR,输出结果LR+
- 将LR+(8*8).转换成16进制数(long long),得到密文
数据结构
- 所有密码变化均用二维数组存储,方便变化计算
‘’
- 所有规则交换表,P盒,S盒均存储为二维数组,与步骤1统一方便计算
‘’
‘’
‘’
- 16位密码存储采用long long
”
C语言源码重要函数
实验结果
加密过程
解密过程