Character String Encryptie


download encryptie testprogramma
download gehele Delphi-7 project

Inleiding

Soms is het handig om tekst in een onleesbare vorm op te slaan, zoals in het geval van passwords.
In dit artikel wordt een eenvoudige manier beschreven om een regel tekst te versleutelen.

De methode

Een character string wordt beschouwd als opvolgende groepjes van 4 tekens.
Dus, characters 1..4 vormen groep 0, characters 5..8 vormen groep 1, enzovoorts.
Een groepje van 4 characters wordt vervolgens opgeslagen in een 32 bit integer (DWORD).

Dan worden de bits van dit DWORD onderling verwisseld.
Daarna wordt het DWORD beschouwd als groepjes van 6 bits.
Groepjes 0..4 zijn 6 bits groot, voor groep 5 blijven 2 bits over.

Een 6 bits groepje wordt nu de index naar een string van 64 characters.
Deze string is vooraf samengesteld.
Elke 6 bits waarde levert zo een character uit de string op.
De aldus verkregen characters vormen de string die het eindresultaat is van de encryptie.

Het voordeel van deze aanpak is dat een character geen vast (versleuteld) resultaat geeft,
omdat drie andere characters ook invloed uitoefenen.

Merk op, dat 4 characters (elk 8 bits groot) 6 characters opleveren in versleutelde vorm.

Hieronder staat de data flow

Gedetailleerde beschrijving

We willen de string 'hello there' versleutelen.
De eerste 4 characters worden geplaatst in variable dd.
Variable i stapt door de 32 bit DWORDs, j telt van 0..3 voor de 4 characters in een DWORD.
Als DWORD dd zijn 4 characters binnen heeft dat stapt variabele k door de 32 bits van dd en laadt bits
11, 22, 1, 12, 23, 2, 13, ..... {stappen van 11, modulo 32} en plaatst deze bits in
posities 0, 1, 2, 3, ... van DWORD ee.
ee wordt nu beschouwd als opgebouwd uit veldjes van 6 bits.
Variable k stapt nu van 0..5 om deze veldjes te lezen.
Uit de veldwaarde wordt n berekend, de index naar string encstring.
encstring[n] levert een character, dat aan een string wordt toegevoegd, het eindresultaat van de encryptie.

encstring[ ] wordt bij het starten van het programma geïnitialiseerd en
krijgt de inhoud '. / 0123456789ABCD....XYZabcd...xyz' , in totaal 64 characters.

Om een gecodeerde string terug te vertalen naar originele tekst, is een omgekeerde bewerking nodig.
Voor details verwijs ik naar de source code.

Test programma

Om de procedure te testen is een (Delphi-7) testproject gemaakt.
In Editbox source kan een tekst worden getikt.
Bij het klikken op de encode knop wordt deze tekst vertaald en het resultaat weergegeven in
statictext dest.
De "X" knoppen wissen de tekst.
Wis nu de originele tekst en klik op decode om naar de versleutelde tekst terug te vertalen.

Het project heeft een aparte unit encrypt_unit, die de functies encodestring en decodestring bevat.
Hieronder staat een snapshot van het testprogramma in bedrijf.