Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
goelp14
GitHub Repository: goelp14/easyctf-iv-problems
Path: blob/master/keyed_xor/grader.py
650 views
1
from io import BytesIO
2
import string
3
import os
4
5
alphabet = string.ascii_lowercase
6
7
f = open("words.txt", "r")
8
words = f.readlines()
9
f.close()
10
11
# len(word) == 11 because we know the flag starts with easyctf{,
12
# so we can get the first 8 characters of the key
13
# this narrows the search space to a reasonable amount
14
keys = [word.strip() for word in words if len(word) == 11]
15
16
17
def get_problem(random):
18
word_1 = random.choice(keys)
19
word_2 = random.choice(keys)
20
key = word_1 + word_2
21
flag = "easyctf{" + "flag" * 4 + "".join(random.choice(alphabet) for x in range(50)) + "}"
22
return key, flag
23
24
25
def create_problem(random):
26
key, flag = get_problem(random)
27
enc = ""
28
for x in range(len(flag)):
29
enc += chr(ord(flag[x]) ^ ord(key[x % len(key)]))
30
return BytesIO(enc.encode())
31
32
33
def generate(random):
34
return dict(files={
35
"keyed_xor.txt": create_problem(random)
36
})
37
38
39
def grade(random, key):
40
_, flag = get_problem(random)
41
if key.find(flag) >= 0:
42
return True, "Correct!"
43
return False, "Nope."
44
45