PDA

Ver la Versión Completa : Cifrado de texto MUY simple


seoane
08-06-2006, 17:25:59
En este truco vamos a utilizar el echo de que si se incializa el valor RandSeed con un mismo valor la funcion Random genera la misma secuencia de numeros "aleatorios". A parte de usar la propiedad: (a XOR b) XOR b = a

Sin mas preambulos:

function Cifrar(Texto: string; Clave: Longint): string;
var
i: integer;
begin
Result:= '';
RandSeed:= Clave;
for i:= 1 to Length(Texto) do
Result:= Result + IntToHex(Byte(Texto[ i ]) xor Byte(Random(256)),2);
end;

function Descifrar(Texto: string; Clave: Longint): string;
var
i: integer;
begin
Result:= '';
RandSeed:= Clave;
while Length(Texto) > 0 do
begin
if not TryStrToInt('$'+Copy(Texto,1,2),i) then
begin
Result:= '';
Exit;
end;
Result:= Result + Char(Byte(i) xor Byte(Random(256)));
Delete(Texto,1,2);
end;
end;


Ejemplo de uso:

var
s: string;
begin
s:= Cifrar('Hola mundo',1978);
ShowMessage('Texto cifrado = ' + s);
s:= Descifrar(s,1978);
ShowMessage('Texto descifrado = ' + s);
end;

Wellnic
06-05-2007, 00:34:15
Siempre me he preguntado hasta qué punto es seguro usar los números pseudoaleatorios... entre distintos sistemas operativos, por ejemplo. ¿Se generan con algún tipo de fórmula universal? La misma "semilla" ¿dará la misma secuencia de números en MS-DOS, Windows 95, Windows Vista? ¿Y en Linux?

seoane
06-05-2007, 04:37:53
Pues no, cada compilador suele usar algoritmos diferentes para generar números aleatorios. Es mas, un programa generado en distintas versiones de delphi puede llegar a generar números diferentes.

La solución pasa por crear nuestra propia función para generar números aleatorios, en los foros encontraras algunos ejemplos.