Om een boodschap om te zetten in onleesbare wartaal kan gebruikgemaakt worden van een codeertechniek die triplerotatie genoemd wordt. De triplerotatie maakt gebruik van drie natuurlijke getallen $$k_1$$, $$k_2$$ en $$k_3$$ die de sleutel tot het geheimschrift vormen. Om een gegeven boodschap te coderen, worden de karakters van de boodschap onderverdeeld in drie groepen: de letters a tot en met i vormen de eerste groep (zowel hoofdletters als kleine letters), de letters j tot en met r de tweede groep (opnieuw zowel hoofdletters als kleine letters), en alle andere karakters (inclusief cijfers, spaties en leestekens) vormen de derde groep. Binnen groep $$i$$ ($$i = 1, 2, 3$$) worden alle karakters daarna $$k_i$$ posities naar links opgeschoven, waarbij de karakters die links uitvallen aan de rechterkant geplaatst worden. Hierbij wordt elke groep dus geroteerd onafhankelijk van de andere twee groepen. Het decoderen gebeurt dan op basis van een rotatie met $$k_i$$ posities naar rechts binnen elke groep $$i$$ ($$i = 1, 2, 3$$).

Neem bijvoorbeeld de boodschap

Nobody expects the Spanish Inquisition!

die we willen coderen volgens de triplerotatie met $$k_1 = 2$$, $$k_2 = 3$$ en $$k_3 = 1$$. Voor deze boodschap wordt groep 1 gevormd door de reeks letters b, d, e, e, c, h, e, a, i, h, I, i, i, i die voorkomen op posities 3, 5, 8, 11, 12, 17, 18, 22, 24, 26, 28, 32, 34, 36 in de boodschap. We schuiven alle letters van deze groep $$k_1 = 2$$ posities naar links, waarbij de letters b en d die links uitgeschoven worden achteraan de reeks worden toegevoegd. Dit resulteert voor groep 1 in de nieuwe letterreeks e, e, c, h, e, a, i, h, I, i, i, i, b, d, die dan terug op de originele posities van groep 1 geplaatst worden. Deze stap van de procedure wordt geïllustreerd in onderstaande figuur.

triplerotatie
triplerotatie

Wanneer dezelfde procedure wordt uitgevoerd voor groep 2 met $$k_2 = 3$$ en voor groep 3 met $$k_3 = 1$$, dan leest de gecodeerde boodschap als

ppene xctnhes t aiSsqhoI iuinNsitb!dooy

Krijg daar maar eens kop of staart aan.

Opgave

Voorbeeld

>>> codeer('Nobody expects the Spanish Inquisition!', 2, 3, 1)
'ppene xctnhes t aiSsqhoI iuinNsitb!dooy'
>>> decodeer('ppene xctnhes t aiSsqhoI iuinNsitb!dooy', 2, 3, 1)
'Nobody expects the Spanish Inquisition!'