[Crypto]fez - CirQ xp0int Posted on Oct 14 2018 题目是简单的异或加密,采用了类似于des的feistal结构,但实际上简单的多。 ```python def round_func(M, K): L = M[0:27] R = M[27:54] new_l = R new_r = xor(xor(R, L),K) return new_l + new_r ``` 一共执行七轮轮函数,直接展开可以得到: $$L_7=R_0\oplus K_2\oplus K_3\oplus K_5\oplus K_6$$ $$R_7=L_0\oplus R_0\oplus K_1\oplus K_3\oplus K_4\oplus K_6\oplus K_7$$ 对于已知明文攻击十分脆弱,因为一系列的K异或之后可以看成一个单独的秘钥,明文与密文相异或就能得到这些密钥。 ```python from fez import xor test = '2315d80c2dd73098953686be6c82aa63c1d362eb0095e4621cce28bec4c921ce016afc7f39fd93b14b6c28ce69c7096b91fd2db0862d'.decode('hex') test_enc = '308e590a180473ab4d23a0c67b65fe2bf2d0a9f1b255e4e2610b0c90e8e210c8ed4f2b9a3b09c1886a781f94fee4f77488c0b30f2395'.decode('hex') flag_enc = 'e822e918e578a7af4f0859a99aab5d7563644beb4207a73d5fc4560d3deb696320cec479431a4f724310499baf5230db7e56764915d0'.decode('hex') test_l, test_r = test[:27], test[27:] test_enc_l, test_enc_r = test_enc[:27], test_enc[27:] key_l = xor(test_r, test_enc_l) key_r = xor(xor(test_l, test_r), test_enc_r) flag_enc_l, flag_enc_r = flag_enc[:27], flag_enc[27:] flag_r = xor(flag_enc_l, key_l) flag_l = xor(xor(flag_enc_r, key_r), flag_r) print flag_l + flag_r ``` 打赏还是打残,这是个问题 赏 Wechat Pay Alipay [Misc]迟来的签到题-pyz [Web]easy_tornado-pyz
没有帐号? 立即注册