
对称加密,安全性较差,经常出现被破解的案例
破解方法:暴力破解
密钥长度:64bits(56bits key + 8bits奇偶校验)
明文长度:64bits
key1 = bin(int(key, 16))[2:]
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]]
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盒置换
密钥长度:
明文长度: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 );
对加密的每一步逆向运算即可。