Cipher CTF Challenge Generator (Trithemius Ave Maria Cipher)Press the blue button to regenerate a Trithemius Ave Maria cipher challenge. This cipher was invented by Johannes Trithemius, and who was a benedictine monk in the 16th Century. Johannes wrote a book named Polygraphia, and which is thought to be the first published book on cryptoanalysis. With the Ave Maria cipher, we replace each plaintext letter with words that make the ciphertext look like a poem. |
Coding
We map the following:
A deus, clemens | B creator,clementissimus |
C conditor,pius | D opifex,piissimus |
E dominus,magnus | F dominator,excelsus |
G consolator,maximus | H arbiter,optimus |
I iudex,sapientissimus | K illuminator,inuisibilis |
L illustrator,immortalis | M rector,aeternus |
N rex,sempiternus | O imperator,gloriosus |
P gubernator,fortissimus | Q factor,sanctissimus |
R fabricator,incompraehensibilis | S conseruator,omnipotens |
T redemptor,pacificus | U auctor,misericors |
X princeps,misericordissimus | Y pastor,conctipotens |
Z moderator,magnificus |
We have no mapping for 'V' and 'W' and where these are mapping to 'U'. Also 'J' is mapped to 'I'.
The basic coding in C# is:
public static string trithemiu(string str) { string cipher = ""; string[,] alphabet = new string[26, 2]{ {"deus", "clemens"}, {"creator", "clementissimus"}, {"conditor", "pius"}, {"opifex", "piissimus"}, {"dominus", "magnus"}, {"dominator", "excelsus"}, {"consolator", "maximus"}, {"arbiter", "optimus"}, {"iudex", "sapientissimus"}, {"",""}, {"illuminator", "inuisibilis"}, {"illustrator", "immortalis"}, {"rector", "aeternus"}, {"rex", "sempiternus"}, {"imperator", "gloriosus"}, {"gubernator", "fortissimus"}, {"factor", "sanctissimus"}, {"fabricator", "incompraehensibilis"}, {"conseruator", "omnipotens"}, {"redemptor", "pacificus"}, {"auctor", "misericors"}, {"",""}, {"",""}, {"princeps", "misericordissimus"}, {"pastor", "conctipotens"}, {"moderator", "magnificus"} }; var rnd = new System.Random(); str = str.Replace("j", "i"); str = str.Replace("v", "u"); str = str.Replace("w", "u"); foreach (char ch in str) { int num = rnd.Next(2); if (ch >= 'a' && ch <= 'z') { int val = (int)ch - (int)'a'; cipher = cipher + alphabet[val, num] + " "; } else cipher = cipher + ch; } return (cipher); }