#!/usr/bin/python3
import hashlib
import sys
FLAG = "Braindead{"
def printAllKLength(set, k):
n = len(set)
printAllKLengthRec(set, "", n, k)
# The main recursive method
# to print all possible
# strings of length k
def printAllKLengthRec(set, prefix, n, k):
# Base case: k is 0,
# print prefix
if (k == 0) :
learn = flip(prefix,n)
#print(learn)
if(learn == "85c44317bd031ad8ba13e622d38198a1"):
print("THE ANSWER IS " + prefix)
return
return
# One by one add all characters
# from set and recursively
# call for k equals to k-1
for i in range(n):
# Next character of input added
newPrefix = prefix + set[i]
# k is decreased, because
# we have added a new character
printAllKLengthRec(set, newPrefix, n, k - 1)
def flip(data, n):
data = FLAG + data + "}"
buflen = len(data)
while n > buflen:
n -= buflen
buf = ["$"] * buflen
for i in range(buflen):
try:
buf[i] = data[i - n]
except:
pass
return hashlib.md5("".join(buf).encode("utf-8")).hexdigest()
if __name__ == "__main__":
#print("welcome to fliphash!")
#print("e.g. flip(\"hello-world!\", 5) =", flip("hello-world!", 5))
try:
value = 0
set = ['a'] * 88
for x in range(36,124):
set[x-36] = chr(x)
k = 15
print(set)
printAllKLength(set, k)
except:
pass
IyEvdXNyL2Jpbi9weXRob24zCgppbXBvcnQgaGFzaGxpYgppbXBvcnQgc3lzCgpGTEFHID0gIkJyYWluZGVhZHsiCgpkZWYgcHJpbnRBbGxLTGVuZ3RoKHNldCwgayk6CiAKICAgIG4gPSBsZW4oc2V0KQogICAgcHJpbnRBbGxLTGVuZ3RoUmVjKHNldCwgIiIsIG4sIGspCiAKIyBUaGUgbWFpbiByZWN1cnNpdmUgbWV0aG9kCiMgdG8gcHJpbnQgYWxsIHBvc3NpYmxlCiMgc3RyaW5ncyBvZiBsZW5ndGggawpkZWYgcHJpbnRBbGxLTGVuZ3RoUmVjKHNldCwgcHJlZml4LCBuLCBrKToKICAgICAKICAgICMgQmFzZSBjYXNlOiBrIGlzIDAsCiAgICAjIHByaW50IHByZWZpeAogICAgaWYgKGsgPT0gMCkgOgogICAgICAgIGxlYXJuID0gZmxpcChwcmVmaXgsbikKICAgICAgICAjcHJpbnQobGVhcm4pCiAgICAgICAgaWYobGVhcm4gPT0gIjg1YzQ0MzE3YmQwMzFhZDhiYTEzZTYyMmQzODE5OGExIik6CiAgICAgICAgICAgIHByaW50KCJUSEUgQU5TV0VSIElTICIgKyBwcmVmaXgpCiAgICAgICAgICAgIHJldHVybgogICAgICAgIHJldHVybgogCiAgICAjIE9uZSBieSBvbmUgYWRkIGFsbCBjaGFyYWN0ZXJzCiAgICAjIGZyb20gc2V0IGFuZCByZWN1cnNpdmVseQogICAgIyBjYWxsIGZvciBrIGVxdWFscyB0byBrLTEKICAgIGZvciBpIGluIHJhbmdlKG4pOgogCiAgICAgICAgIyBOZXh0IGNoYXJhY3RlciBvZiBpbnB1dCBhZGRlZAogICAgICAgIG5ld1ByZWZpeCA9IHByZWZpeCArIHNldFtpXQogICAgICAgICAKICAgICAgICAjIGsgaXMgZGVjcmVhc2VkLCBiZWNhdXNlCiAgICAgICAgIyB3ZSBoYXZlIGFkZGVkIGEgbmV3IGNoYXJhY3RlcgogICAgICAgIHByaW50QWxsS0xlbmd0aFJlYyhzZXQsIG5ld1ByZWZpeCwgbiwgayAtIDEpCgpkZWYgZmxpcChkYXRhLCBuKToKICBkYXRhID0gRkxBRyArIGRhdGEgKyAifSIKICBidWZsZW4gPSBsZW4oZGF0YSkKICB3aGlsZSBuID4gYnVmbGVuOgogICAgbiAtPSBidWZsZW4KICBidWYgPSBbIiQiXSAqIGJ1ZmxlbgogIGZvciBpIGluIHJhbmdlKGJ1Zmxlbik6CiAgICB0cnk6CiAgICAgIGJ1ZltpXSA9IGRhdGFbaSAtIG5dCiAgICBleGNlcHQ6CiAgICAgIHBhc3MKICByZXR1cm4gaGFzaGxpYi5tZDUoIiIuam9pbihidWYpLmVuY29kZSgidXRmLTgiKSkuaGV4ZGlnZXN0KCkKCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAjcHJpbnQoIndlbGNvbWUgdG8gZmxpcGhhc2ghIikKICAjcHJpbnQoImUuZy4gZmxpcChcImhlbGxvLXdvcmxkIVwiLCA1KSA9IiwgZmxpcCgiaGVsbG8td29ybGQhIiwgNSkpCiAgdHJ5OgogICAgdmFsdWUgPSAwCiAgICBzZXQgPSBbJ2EnXSAqIDg4CiAgICBmb3IgeCBpbiByYW5nZSgzNiwxMjQpOgogICAgICAgIHNldFt4LTM2XSA9IGNocih4KSAKICAgIGsgPSAxNQogICAgcHJpbnQoc2V0KQogICAgcHJpbnRBbGxLTGVuZ3RoKHNldCwgaykKICBleGNlcHQ6CiAgICBwYXNzCg==