对称加密,安全性较差,经常出现被破解的案例
破解方法:暴力破解
密钥长度:64bits(56bits key + 8bits奇偶校验)
明文长度:64bits
- 十六进制转二进制
key1 = bin(int(key, 16))[2:]
- 压缩置换
密钥共8个字节, 其中每个字节前七个bit
下图为PC_1置换表
key2 = '' checkCode = '' for i in range(8): #取每个字节前7bit作为密钥 key2 += key1[i: (i+1)*8 - 1] #每个字节最后一个bit作为校验码 checkCode +=key[i*8 + 7] #PC-1置换 key3 = '' for i in range(56) key3+=key2[PC_1[i]]
- 密钥扩充
下图为每一轮左移时候的左移步数
下图为PC_2的置换表
子密钥只取图中这些位置的数据组成子密钥,多余的位省略
C=key3[0:28] # C0 D=key3[28:56]# D0 K = []*16 for i in range(16): # C左移==>C, 左移步数依据轮数查表 # D左移==>D, 左移步数依据轮数查表 K[i] = PC_2_Conver(C,D) #将移位过的数据进行查表转换为子密钥明文IP置换
将明文按照下表进行bit位位置调整置换
IP_data = '' for i in range(64): IP_data += mingwen[IP_table[i]] Ltemp = IP_data[0:32] #L0 Rtemp = IP_data[32:64] #R0加密
for i in range(16) E盒置换(Rtemp )==>R(32bit扩展位48bit) R⊕子密钥K[i]==>R S盒置换(R)==>R(48bit压缩为32bit) P盒置换(R)==>R Ltemp⊕R==>R Rtemp ==>Ltemp R==>Rtemp Rtemp ==>R16 Ltemp ==>L16 IP-1置换(R16L16)==>密文E盒置换 S盒置换
- 将48位数据切割成为8个6bit的数据
- 取出[bit0,bit5]==>行数
- 取出[bit1,bit2,bit3,bit4]==>列数
- 查找S表,取出对应的4位数据
- S盒置换后,一共8块数据,每块4位,共32bit
密钥长度:
- 双倍长密钥:128bits
- 三倍长密钥:192bits
明文长度:64bits
加密 双倍长密钥密钥分为两块(2 X 8Byte),自左到右分为LK, RK
DES( DATA, LK, TMP1 );
UDES( TMP1, RK, TMP2 );
DES( DATA, LK, DEST );
密钥分为三块(3 X 8Byte),自左到右分为LK, CK, RK
DES( DATA, LK, TMP1 );
UDES( TMP1, CK, TMP2 );
DES( TMP2, RK, DEST );
对加密的每一步逆向运算即可。



