MyOwnCBC[AFCTF2018]

y4ny4n

分组密码的CBC与EBC模式

学习出处:

https://www.cnblogs.com/eleven-elv/p/7289579.html

https://www.jianshu.com/p/79a225c2650e

题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-

from Crypto.Cipher import AES
from Crypto.Random import random
from Crypto.Util.number import long_to_bytes

def MyOwnCBC(key, plain):
if len(key)!=32:
return "error!"
cipher_txt = b""
cipher_arr = []
cipher = AES.new(key, AES.MODE_ECB, "")
plain = [plain[i:i+32] for i in range(0, len(plain), 32)]
print plain
cipher_arr.append(cipher.encrypt(plain[0]))
cipher_txt += cipher_arr[0]
for i in range(1, len(plain)):
cipher = AES.new(cipher_arr[i-1], AES.MODE_ECB, "")
cipher_arr.append(cipher.encrypt(plain[i]))
cipher_txt += cipher_arr[i]
return cipher_txt

key = random.getrandbits(256)
key = long_to_bytes(key)

s = ""
with open("flag.txt","r") as f:
s = f.read()
f.close()

with open("flag_cipher","wb") as f:
f.write(MyOwnCBC(key, s))
f.close()

分析

不同于一般的CBC,该题不是将加密后的一小段密文作为iv,而是直接作为下一次加密的key。

由于给出密文,将其分段后,就可以从最后一段逐段推出前一段明文,但由于不知道初始key,所以无法推出第一段明文(flag放到了文末)

知识点

ECB模式

电码本模式

这种模式是将整个明文分成若干段相同的小段,然后对每一小段进行加密。

image-20200712162612376

CBC模式

密码分组链接模式

这种模式是先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。

image-20200712162708926

搬运自:https://www.jianshu.com/p/79a225c2650e

解题

1
2
3
4
5
6
7
8
9
10
11
12
13
from Crypto.Cipher import AES
from Crypto.Util.number import long_to_bytes
cipher_text=open('https://y4ny4nblog.oss-cn-beijing.aliyuncs.com/img/flag_cipher','rb').read()
cipher=[]
plain=[]
mode=AES.MODE_ECB
for i in range(0,len(cipher_text),32):
cipher.append(cipher_text[i:i+32])
for i in range(len(cipher)-1):
cryptor=AES.new(cipher[(-1)*i-2],mode)
plain.append(cryptor.decrypt(cipher[(-1)*i-1]))
flag=[i.decode('utf-8') for i in plain]
print(''.join(flag[::-1]))

image-20200712163031171

  • 本文标题:MyOwnCBC[AFCTF2018]
  • 本文作者:y4ny4n
  • 创建时间:2020-07-11 15:40:58
  • 本文链接:https://y4ny4n.cn/2020/07/11/MyOwnCBC[AFCTF2018]/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
此页目录
MyOwnCBC[AFCTF2018]