Test Foro de elhacker.net SMF 2.1

Seguridad Informática => Seguridad => 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

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:



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:


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:


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.