A szövegek titkosítása számtalan formában lehetséges; az alábbiakban bemutatásra kerülő módszer az egyik legegyszerűbb ezek közül. Ez a mód bőven elegendő arra, hogy ne tudják elolvasni a szöveget, de ha valaki igazán fel akarja törni a titkosítást, akkor annak nem fog sok idejébe kerülni. :-) Alapvetően a szövegek titkosításának elve a betűk olyanmód összekeverése, hogy utána az eredeti szöveg adatveszteség nélkül visszaállítható legyen. Az alábbi példában használt technika alapja a bit-ek eltolása: a karaktereket egy byte értéknek vesszük és meghatározott hellyel eltoljuk a bit-jeit jobbra vagy balra. Ha valamelyik bit "túlcsúszik" a byte végén, akkor az az elejére kerül (pl. ha a jobb oldalon lépi túl a byte határát, akkor a bal oldalon tűnik fel). Például a '01010011' érték három bit-tel balra eltolva '10011010' lenne. Ha ezt az értéket három bittel jobbra tolnánk el, akkor az eredeti érték visszaállna. Az első dolog: egy függvény készítése, amely egy karakter bit-jeit meghatározott hellyel eltolja valamelyik irányba, és visszaadja annak titkosított értékét. Function RotateBits(C: Char; Bits: Integer): Char; var SI : Word; begin Bits := Bits mod 8; if Bits < 0 then // balra begin // Az adatokat egy Word (2 byte) jobb felébe helyezzük SI := MakeWord(Byte(C),0); // Meghatározott bit-tel eltoljuk balra... SI := SI shl Abs(Bits); end else // ...jobbra begin // Az adatokat egy Word (2 byte) bal felébe helyezzük SI := MakeWord(0,Byte(C)); // Meghatározott bit-tel eltoljuk jobbra SI := SI shr Abs(Bits); end; SI := Lo(SI) or Hi(SI); Result := Chr(SI); end; Először maximum 8-ra korlátozzuk a valamelyik irányba történő mozgatást. Ha az érték negatív, balra tolja el, egyébként pedig jobbra. A mod függvénnyel biztosítjuk, hogy az eredmény -7 és 7 közé essen. Ezután a byte-ot elhelyezzük egy Word érték jobb vagy bal felében. Mivel a Word 2 byte-ot tartalmaz, a második byte-ját fogjuk használni az eredeti byte eltolt bit-jeinek tárolására. Ha balra tolom el őket, akkor a Word jobb felébe helyezem az értéket, ha pedig jobbra, akkor a bal felébe. Ezt követően az SHL (Shift Left) vagy az SHR (Shift Right) eljárások megfelelő használatával eltolom a biteket balra illetve jobbra. A végső feladat ennek a két értéknek az egyesítése. Ezt a Word első (hi-order) és második (lo-order) byte-jának OR operátorral történő összekapcsolásával érhetjük el. Ennek hatására a két byte értéke egy byte-tá egyesül. Ezt a byte értéket átalakítjuk egy Char típusú értékké; ez lesz végül a függvény visszatérő eredménye. És most lássuk a fő-eljárást, amely elvégzi a titkosítást és a dekódolást: Function Encryption(Str,Pwd: String; Encode: Boolean): String; var a,PwdChk,Direction,ShiftVal,PasswordDigit : Integer; begin PasswordDigit := 1; PwdChk := 0; for a := 1 to Length(Pwd) do Inc(PwdChk,Ord(Pwd[a])); Result := Str; if Encode then Direction := -1 else Direction := 1; for a := 1 to Length(Result) do begin if Length(Pwd)=0 then ShiftVal := a else ShiftVal := Ord(Pwd[PasswordDigit]); if Odd(A) then Result[A] := RotateBits(Result[A],-Direction*(ShiftVal+PwdChk)) else Result[A] := RotateBits(Result[A],Direction*(ShiftVal+PwdChk)); inc(PasswordDigit); if PasswordDigit > Length(Pwd) then PasswordDigit := 1; end; end; A fenti függvénynek három paramétere van. Az első a bemeneti, titkosítandó szöveg (Str) a második a jelszó (Pwd), (amennyiben megadjuk), a harmadik pedig egy logikai típusu paraméter, amely meghatározza, hogy titkosítani vagy dekódolni akarunk. Elsőként a jelszó karaktereinek Ord értékét (sorszámát vagy ASCII kódját) összeadjuk. Ez egy további lehetőséget nyújt a szöveg megkeverésére. Utána nincs is más dolgunk , mint hogy a titkosítandó szöveg karakterein végighaladva a RotateBits függvény segítségével összekeverjük annak tartalmát. Amennyiben megadtunk valamilyen jelszót, akkor annak ASCII kódját vesszük értékül a karakterek eltolása tekintetében. A ciklus minden egyes végigfutásánál a jelszó k övetkező karakterét vesszük alapul. (Ha a végére értünk, akkor az első karakter következik.) Ha nincs jelszó, akkor az eltolási érték a ciklusnak a szövegben aktuálisan elért helyének értékét veszi fel. (pl. Ha az első karakteren áll, akkor 1, ha a másodikon, akkor 2, etc.) Végül: ha a szöveg páratlan sorszámú karakerén állunk (pl. 1., 3., 5.), akkor a biteket balra toljuk, ha pedig pároson, akkor jobbra. A Direction érték pedig az egész folyamat irányát fordítja meg, attól függően, hogy titkosítást vagy dekódolást adtunk meg a függvény harmadik paraméterében.