ROT 26

Challenge:

We've applied some encoding to obfuscate our messages. There's no way you can figure out the original message now?! I applied the unbreakable ROT 26 algorithm:

g!0{]n\7*+0y~+1 (!y.+0yKM9`

Solution:

There is some humor with this challenge in that a standard ROT26 would just be rotating each character 26 places in a circular alphabet. Meaning all the characters would remain unchanged. The clue with this challenge however is that the original message contains all four character types (e.g. upper and lowercase characters, digits and special characters) which means the rotation was done against the 94 printable characters versus just 26 alpha characters.

I created a Python 3.8 script and used the str.maketrans() and str.translate() functions to perform the rotation.

# Create a string of prinatable characters in ASCII order (e.g. ! thru ~)
printable = "".join([chr(i) for i in range(33, 127)])

# Create a translation table with "printable" rotated by 26 characters
rot26 = str.maketrans(printable, printable[-26:] + printable[:len(printable) - 26] )

# Perform the translation and print the flag
print(str.translate("g!0{]n`7*+0y~+1|(!y.+0yKM9", rot26))

Running the script produces the flag:

$ python3 rot26.py

MetaCTF{not_double_rot_13}

Published:

Updated:

Leave a comment