Xiomara 2018 - Custom HEN

by chq-matteo
February 26, 2018

After a rocky start we managed to get a kind of understandable problem statement.

We are given a custom cipher with references to an “alphametic puzzle”.

After a quick search I found http://www.tkcs-collins.com/truman/alphamet/alpha_solve.shtml

And I got a mapping from letters to digits

``````eflag = '082_336_88_167755403'.split('_')
enc = {'C': 0, 'F': 2, 'G': 1, 'H': 9, 'K': 3, 'N': 4, 'P': 5, 'U': 6, 'Y': 7, 'Z': 8}
dec = {str(y): x for x, y in enc.items()}
``````
``````def alphametic(x):
return ''.join([str(dec[y]) for y in x])
``````

The second part of the cipher was a bit hard to decipher because of language barriers.

What it did was basically:

1. convert each letter of the plain text to its position in the alphabet starting from 0
2. substitute each number following this rule `plain_text[i] = (plain_text[i] - (i+1) * len(plain_text)) % 26`
3. convert the numbers back

``````import string
i = lambda x: string.uppercase.index(x)

def custom(x):
size = len(x)
for j, c in enumerate(x):
yield string.uppercase[(i(c) + (j + 1) * size) % 26]
``````
``````efl = ''
for ef in eflag:
efl += (alphametic(ef))
``````
``````print(''.join(custom(efl)))
``````
``````THEARSOFDIDUCTION
``````