Nuevo algoritmo de encriptacion

Iniciado por byronzapatillas, 27 Agosto 2012, 12:35 PM

0 Miembros y 1 Visitante están viendo este tema.

byronzapatillas

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!!

byronzapatillas


byronzapatillas

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

APOKLIPTICO

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.
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.