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.