BUUCTF N1BOOK [第七章 CTF之CRYPTO章]N1DES

学习DES 加解密思路 (由于python2 python3 兼容问题 代码很难实现...)
由于DES是对称加密算法
所以已知加密过程后
只需要将加密过程逆过来即可
借个图
image
而这题的关键就是怎么求出 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~~}

posted @ 2023-10-01 14:30  N0zoM1z0  阅读(73)  评论(0编辑  收藏  举报