Que tal, pues exiten varios métodos de encriptado, depende de cual quieres usar lo que te voy a pasar a continuación es algo simple pero funciona.
Se trata de darle valores diferentes a cada letra y sustituir estos valores por las respectivas letras del mensaje.
NOTA: ESTE CODIGO ES PARA ENCRIPTAR TEXTO, NO ARCHIVOS
Necesitamos para ejecutar el codigo 2 TMemo, y dos botones.
En el primer botón pondremos lo siguiente
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
a:string;
begin
a:='';
Memo2.Lines.Clear;
if Trim(memo1.Text)='' then
showmessage('Introduce un texto')
else
begin
for i:=1 to length(Memo1.Text) do begin
if ord(Memo1.Text[i])in[32..255] then
a:=a+encode(Memo1.Text[i])
else
if ord(Memo1.Text[i])=13 then
a:=a+encode(' ');
end;
Memo2.Text:=a;
end;
end;
Lo siguiente en el segundo botón
procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer;
a,b:string;
begin
Memo2.Text:='';
if Trim(memo1.Text)='' then
showmessage('Introduce un texto')
else
begin
i:=0;
b:='';
repeat
a:='';
for j:=1 to 7 do begin
a:=a+(Memo1.Text[i+j])
end;
if Decode(a)=13 then
b:=b+#13
else
b:=b+Chr(Decode(a));
i:=i+7;
gauge1.Progress:=gauge1.Progress+i;
until i=Length(Memo1.Text);
Memo2.Text:=b;
end;
end;
Y las siguientes 2 funciones
function TForm1.Encode(letra: char): string;
begin
case Ord(letra) of
13:if flag then
result:='ü±&ãç>?'
else
result:='õ?Ð<±#Ð';
32:if flag then
result:='ËÆÆøÕ)ß'
else
result:=')Ï=*åãö';
33:if flag then
result:='{[¿]ªä('
else
result:='^&ç=ø)[';
34:if flag then
result:='{=Æ÷Ã>õ'
else
result:='äÝÖ>}^ß';
end;
if (random(9)+1)mod 2=0 then
flag:=false
else
flag:=true;
end;
La función "encode" que te muestro arriba cambia la letra del texto por la cadena de caracteres según su valor ordinal, es decir, si en el texto hay una "@" la función buscará el 64 y regresará la cadena que en ella haya, no las pongo todas por que son 255, tu deberás darle los valores que desees pero sin repetir las cadenas, el tamaño de estas cadenas es a tu consideración solo hay que cambiar en el for del segundo botón el tamaño al que serán las cadenas, las mias son de 7 caracteres y exiten 2 cadenas para cada letra puedes ponerle más si así lo deseas
Ahora la siguiente función
function TForm1.Decode(palabra: string): integer;
begin
if (palabra='ü±&ãç>?')or(palabra='õ?Ð<±#Ð') then
result:=13
else
//El if de arriba fue agregado para caracter "salto de linea" *********************************
if (palabra='ËÆÆøÕ)ß')or(palabra=')Ï=*åãö') then
result:=32
else
if (palabra='{[¿]ªä(')or(palabra='^&ç=ø)[') then
result:=33
else
if (palabra='{=Æ÷Ã>õ')or(palabra='äÝÖ>}^ß') then
result:=34
end;
Ahora hay que hacer lo inverso de la función de arriba, al recibir la función la cadena que le manda el botón2 buscará y regresará un entero el cual es el valor ordinal de la letra que ya habiamos codificado, hay que hacerlo para los 255 caracteres, yo empiezo del 32, puesto que de ahí empiezan los caracteres escribibles, y el 13 para el salto de linea
NOTA: AL CREARSE O AL ACTIVARSE LA FORMA HAY QUE PONER LA SIGUIENTE LINEA
randomize;
hay que declarar tambien la variable en el apartado private
flag:boolean;
Espero esto te sirva de algo