70 lines
1.5 KiB
Python
70 lines
1.5 KiB
Python
import math
|
|
|
|
flag = "what_the_flag??!"
|
|
|
|
comment = "#input_string must only contain ascii characters"
|
|
comment2 = "#is the length of input_string important?"
|
|
def hash(input_string):
|
|
|
|
sl = eval(comment2[8:11] + "(" + comment[1:7] + comment2[24:31] + ")")
|
|
|
|
#max 32 chars
|
|
if sl > 2**5:
|
|
input_string = input_string[:32]
|
|
sl = 64 - (2**4 + 16)
|
|
|
|
|
|
#Padding
|
|
if sl != 32:
|
|
l = 32 - sl
|
|
input_string = input_string + comment2[:l]
|
|
|
|
sl = len(input_string)
|
|
|
|
|
|
h665 = input_string[int(sl / 2) : sl]
|
|
|
|
sta = [] #How far should each char be shifted
|
|
for char in h665:
|
|
sta.append(ord(char))
|
|
|
|
h664 = input_string[:int((sl / 2))]
|
|
|
|
a = True
|
|
while a:
|
|
for i in range(int(sl / 2)):
|
|
h664 = (h664[:i] +
|
|
f2(h664[i], sta[i]) +
|
|
h664[i + 1:])
|
|
for y in range(int(sl)):
|
|
a = f3(input_string[i], y)
|
|
|
|
|
|
i = 0
|
|
input_string = ""
|
|
while i < sl / 2:
|
|
input_string += h664[i]
|
|
input_string += h665[i]
|
|
i = i+1
|
|
|
|
|
|
return input_string.replace(" ", "_")
|
|
|
|
def f2(v1, v2):
|
|
v3 = (ord(v1) + v2) %126
|
|
it = 0
|
|
while (v3 < 32 or v3 > 126):
|
|
v3 = (v3 + ord(v1) + v2 + it) % 126
|
|
it = it + 1
|
|
return chr(v3)
|
|
|
|
def f3(v2, v1):
|
|
v3 = (ord(v2) + v1) %126
|
|
for i in range(v1):
|
|
v3 = (v3 + ord(v2) + v1 + i) % 126
|
|
return v3 == -1
|
|
|
|
|
|
flag_hash = hash(flag)
|
|
print("{" ,flag_hash, "}")
|