Foro de elhacker.net

Seguridad Informática => Criptografía => Mensaje iniciado por: byronzapatillas en 27 Agosto 2012, 12:35 pm



Título: Nuevo algoritmo de encriptacion
Publicado por: byronzapatillas en 27 Agosto 2012, 12:35 pm
hola amigos, hoy les traigo un pequeño algoritmo de cifrado y desencriptación que puede ser muy útil para cifrar archivos, ejecutables, cadenas de texto y todo lo que quieran. Lo escribí en delphi pero es sencillo de entender el código:

Función para cifrar
Código:
function cifrar(cadena: String; Key: Integer): String;
var
i:integer;
begin
   Result:='';
   for i:=1 to Length(cadena) do
   begin
    RandSeed:= key*i+length(cadena);
    if i mod 2= 0 then
       Result:=Result+Chr(ord(cadena[i]) xor (key*i+random(512)+length(cadena))+i)
    else
       Result:=Result+Chr(ord(cadena[i]) xor (key*i*random(1024)-length(cadena))-randseed)  ;
    end;
end;

Ahora vamos con la función para descifrar:

Código:

function descifrar(cadena: String; Key: Integer): String;
var
i:integer;
begin
   Result:='';
   for i:=1 to Length(cadena) do
   begin
    RandSeed:= key*i+length(cadena);
    if i mod 2= 0 then
       Result:=Result+Chr((ord(cadena[i])-i) xor (KEY*i+random(512)+length(cadena)))
    else
       Result:=Result+Chr((ord(cadena[i])+randseed) xor (KEY*i*random(1024)-length(cadena)))  ;
    end;
end;

Este algoritmo se basa en el cifrado XOR combinado con trasposición, haciendo de él un fuerte método de cifrado. A ver si le echan un vistazo e intentan mejorarlo o buscan posibles vulnerabilidades. Saludos!!


Título: Re: Nuevo algoritmo de encriptacion
Publicado por: byronzapatillas en 27 Agosto 2012, 13:04 pm
comentar no cuesta!! =)


Título: Re: Nuevo algoritmo de encriptacion
Publicado por: byronzapatillas en 27 Agosto 2012, 13:49 pm
hola de nuevo, he mejorado las funciones de cifrar y descifrar para que la pass sea alfa numérica:
Código:

function cifrar(cadena, Key: string): String;
var
i,j:integer;
temp:integer;
begin
   Result:='';
   for i:=1 to Length(cadena) do
   begin
    for j:=1 to length(key) do
    begin
      temp:= temp + ord(key[i]) + j mod i;
    end;
    Randseed:= temp*i+length(cadena);
    if i mod 2= 0 then
       Result:=Result+Chr(ord(cadena[i]) xor (temp*i+random(512)+length(cadena))+i)
    else
       Result:=Result+Chr(ord(cadena[i]) xor (randseed*i*random(1024)-length(cadena))-randseed)  ;
    end;
end;

function descifrar(cadena, Key: string): String;
var
i,j:integer;
temp:integer;
begin
   Result:='';
   for i:=1 to Length(cadena) do
   begin
    for j:=1 to length(key) do
    begin
      temp:= temp + ord(key[i]) + j mod i;
    end;
    Randseed:= temp*i+length(cadena);
    if i mod 2= 0 then
       Result:=Result+Chr((ord(cadena[i])-i) xor (temp*i+random(512)+length(cadena)))
    else
       Result:=Result+Chr((ord(cadena[i])+randseed) xor (randseed*i*random(1024)-length(cadena)))  ;
    end;
end;


Ejemplo de uso:

Código:
showmessage(cifrar('hola mundo', 'estaesmypass')); //el resultado seria: Þ‘)x›vïJù

showmessage(descifrar('Þ‘)x›vïJù', 'estaesmypass')); //el resultado seria: 'hola mundo'

Se agradecen los comentarios


Título: Re: Nuevo algoritmo de encriptacion
Publicado por: APOKLIPTICO en 27 Agosto 2012, 17:08 pm
Bueno, es un algoritmo de cifrado que utiliza un keystream basado en un generador pseudoaleatorio, pero cuál estás utilizando?? Si usas el que viene con la librería del lenguaje de programacion, te voy diciendo que no es seguro, ya que sería vulnerable a un ataque known-plaintext. O simplemente si hubiese alguna manera de conseguir el keystream, se podría conseguir una clave equivalente cuya complejidad sería de 2^32 (un seed DWORD).

Saludos
APOKLIPTICO.