BUUCTF N1BOOK [第七章 CTF之CRYPTO章]N1DES
学习DES 加解密思路 (由于python2 python3 兼容问题 代码很难实现...)
由于DES是对称加密算法
所以已知加密过程后
只需要将加密过程逆过来即可
借个图
而这题的关键就是怎么求出 InvS_box
这里有个算法(AES DES等都适用):
new_contrary_sbox = [0]*256
for i in range(256):
line = (new_s_box[i]&0xf0)>>4
rol = new_s_box[i]&0xf
new_contrary_sbox[(line*16)+rol] = i
print(new_contrary_sbox)
这样就求得逆S盒了
求出逆S盒过后 解密函数这么写:
def decrypt( self,plaintext):
res = ''
for i in range(len(plaintext) // 16):
block = plaintext[i * 16:(i + 1) * 16]
L = block[:8]
R = block[8:]
for round_cnt in range(32):
L, R = str_permutate(L,invs_box) , str_permutate(R,invs_box)
L, R = R, str_xor(round_add(R, self.Kn[31-round_cnt]),L)
L, R = R, L
res += L + R
return res
几个地方体现逆 两条语句的顺序 以及 31-cnt(因为我们是从后往前逆向)
最终flag
n1book{4_3AsY_F3istel_n3tw0rk~~}