Sir Francis Beaufort1 was een Britse admiraal die met name bekend is geworden door de naar hem vernoemde schaal voor windkracht: de schaal van Beaufort2. Ook de Beaufortzee3 werd naar hem vernoemd.

Francis Beaufort
Francis Beaufort (1774–1857).
Hagelin M-209
De Hagelin M-209.

Wellicht minder bekend is de Beaufortversleuteling: een manier die hij uitvond om berichten te coderen en te decoderen. De meest bekende toepassing ervan was een rotor-gebaseerde codeermachine uit de Tweede Wereldoorlog: de Hagelin M-2094. In die versleuteling hebben alle letters (AZ) een waarde (0–25) die correspondeert met hun positie in het alfabet.

alfabet
In de Beaufortversleuteling hebben alle letters (AZ) een waarde (0–25) die correspondeert met hun positie in het alfabet.

Om een bericht $$M = M_0\ldots M_{n-1}$$ van $$n$$ letters te coderen, gebruikt de Beaufortversleuteling een sleutel waarvan de letters desnoods herhaald of afgekapt worden om een tweede reeks $$K = K_0\ldots K_{n-1}$$ van $$n$$ letters te bekomen. De cijfertekst $$C = C_0\ldots C_{n-1}$$ (het gecodeerde bericht) van $$n$$ letters wordt bekomen door (de waarde van) de letters op overeenkomstige posities van elkaar af te trekken (modulo 26): \[ C_i = (K_i - M_i)\ \textrm{mod}\ 26 \ \ \ i = 0, \ldots, n-1\] Als we dit toepassen om het bericht DEFENDTHEEASTWALLOFTHECASTLE te coderen met sleutel FORTIFICATION, dan krijgen we

codering
Codering van het bericht DEFENDTHEEASTWALLOFTHECASTLE door een Beaufortversleuteling met sleutelwoord FORTIFICATION, levert de cijfertekst CKMPVCPVWPIWUJOGIUAPVWRIWUUK op.

Een cijfertekst kan gedecodeerd worden door er opnieuw dezelfde codering op toe te passen. Er geldt immers dat \[ M_i = (K_i - C_i)\ \textrm{mod}\ 26 \ \ \ i = 0, \ldots, n-1\] Als we dit toepassen op het bovenstaande voorbeeld, dan krijgen we

decodering
Decodering van de cijfertekst CKMPVCPVWPIWUJOGIUAPVWRIWUUK door een Beaufortversleuteling met sleutelwoord FORTIFICATION, levert terug het originele bericht DEFENDTHEEASTWALLOFTHECASTLE op.

Omdat decoderen bij een Beaufortversleuteling exact hetzelfde is als coderen, spreekt met van een symmetrische versleuteling.

Opgave

Definieer een klasse Beaufort waarmee berichten kunnen gecodeerd en gedecodeerd worden volgens een Beaufortversleuteling met sleutel $$K$$. Bij het aanmaken van een nieuwe versleuteling (Beaufort) moet de sleutel $$K$$ (String) doorgegeven worden. De klasse mag ervan uitgaan dat alle berichten, sleutels en cijferteksten enkel uit hoofdletters bestaan en dat een sleutel minstens vier letters telt, zonder dat dit expliciet moet gecontroleerd worden.

Een versleuteling $$v$$ (Beaufort) moet een eigenschap sleutel hebben, met als waarde de sleutel $$K$$ (String) die werd doorgegeven bij het aanmaken van de versleuteling $$v$$.

Op een versleuteling $$v$$ (Beaufort) moet je minstens de volgende methoden kunnen aanroepen:

Definieer ook nog deze drie afzonderlijke functies:

Voorbeeld

> const codec = new Beaufort("FORTIFICATION")
> codec.sleutel
"FORTIFICATION"
> codec.codeerLetter("D", 0)
"C"
> codec.codeerLetter("E", 1)
"K"
> codec.codeerLetter("F", 2)
"M"
> codec.codeer("DEFENDTHEEASTWALLOFTHECASTLE")
"CKMPVCPVWPIWUJOGIUAPVWRIWUUK"
> codec.decodeerLetter("C", 0)
"D"
> codec.decodeerLetter("K", 1)
"E"
> codec.decodeerLetter("M", 2)
"F"
> codec.codeer("CKMPVCPVWPIWUJOGIUAPVWRIWUUK")
"DEFENDTHEEASTWALLOFTHECASTLE"

> const codec1 = new Beaufort("SECRET")
> const codec2 = new Beaufort("WORD")
> optellen(codec1, codec2).sleutel
"OSTUAHJHYFVW"
> aftrekken(codec1, codec2).sleutel
"WQLOIFBBGDNQ"
> vermenigvuldigen(codec1, 3).sleutel
"CMGZMF"
> vermenigvuldigen(3, codec1).sleutel
"CMGZMF"
> optellen(optellen(codec1, codec1), codec1).sleutel
"CMGZMF"

Epiloog: Action!

Action!
De stripverhalen van Don Martin in het tijdschrift MAD stonden vooral bekend omwille van hun vele geluidseffecten.

De stripverhalen van Don Martin in het tijdschrift MAD5 stonden vooral bekend omwille van hun vele geluidseffecten:

  • ARGLE GLARGLE GLORGLE GLUK: prinses die mondwater gebruikt
  • BUKKIDA BUKKIDA BAKKIDA BAKKIDA: bokser die met hoofd van tegenstander rammelt
  • CHOOK CHOOK CHOOK CHOOK: man die aan het graven is
  • DOOT: arts die met hamer op knie van patiënt slaat
  • FAGWOOSH SHOSSH GOOGLOOOM FUSH: geluiden die te horen zijn in zeeschelp
  • FLOOT THWIP THOP KLOP: man die een paraplu opvouwt
  • FOOWOOM: vlammenwerper
  • FWISK FWISK FWISKITTY FWASK: man die onbewoond eiland veegt
  • GEEEN: Plastic Man die middelvinger uitsteekt naar man op 32e verdieping
  • KITTOONG SHKLUNK: hersenen die als basketbal in hoofd van Frankenstein gegooid worden
  • KOONG: man die aan hoofd geraakt wordt door kruiwagen vol cement
  • MOWM: explosie van atoombom
  • POING POING POING: springstok
  • SHKWITZ SHKWITZ: man die bril schoonmaakt
  • SLOOPLE GLIK SPLORP: man die soep eet
  • WUNK SPWAPPO KATOONK SPLAT: passagiers die kaper aanvallen

Doug Gilford heeft ze allemaal in een mooi overzicht6 gegoten.