Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Desencriptar password sha1 con DCPcrypt (https://www.clubdelphi.com/foros/showthread.php?t=32932)

Iuconlas 21-06-2006 17:39:01

Desencriptar password sha1 con DCPcrypt
 
Hola a todos,
Estoy desarrollando una pequeña aplicación con la que desencriptar unos passwords encriptados con el método sha1. Mirado en el foro, en la sección de trucos y el amigo google he llegado a hacer algo pero no me funciona correctamente. Utilizo los componentes de DCPcrypt y el código de la aplicación sería el siguiente:

Funciones para desencriptar (están en la sección de trucos)
Código Delphi [-]
procedure TForm1.IniciarCifrador(var C: TDCP_Cipher; algoritmo, hash: byte; password: string);
begin
  case algoritmo of
   DCP_tea:      C := TDCP_tea.Create(nil);
   DCP_des:      C := TDCP_des.Create(nil);
   DCP_ice:      C := TDCP_ice.Create(nil);
   DCP_rc2:      C := TDCP_rc2.Create(nil);
   DCP_rc4:      C := TDCP_rc4.Create(nil);
   DCP_rc5:      C := TDCP_rc5.Create(nil);
   DCP_rc6:      C := TDCP_rc6.Create(nil);
   DCP_3des:     C := TDCP_3des.Create(nil);
   DCP_ice2:     C := TDCP_ice2.Create(nil);
   DCP_idea:     C := TDCP_idea.Create(nil);
   DCP_mars:     C := TDCP_mars.Create(nil);
   DCP_misty1:   C := TDCP_misty1.Create(nil);
   DCP_cast128:  C := TDCP_cast128.Create(nil);
   DCP_cast256:  C := TDCP_cast256.Create(nil);
   DCP_thinice:  C := TDCP_thinice.Create(nil);
   DCP_serpent:  C := TDCP_serpent.Create(nil);
   DCP_twofish:  C := TDCP_twofish.Create(nil);
   DCP_blowfish: C := TDCP_blowfish.Create(nil);
   DCP_rijndael: C := TDCP_rijndael.Create(nil);
  end;
  case hash of
    DCP_md4:       C.InitStr(password, TDCP_md4);
    DCP_md5:       C.InitStr(password, TDCP_md5);
    DCP_sha1:      C.InitStr(password, TDCP_sha1);
    DCP_haval:     C.InitStr(password, TDCP_haval);
    DCP_tiger:     C.InitStr(password, TDCP_tiger);
    DCP_sha256:    C.InitStr(password, TDCP_sha256);
    DCP_sha384:    C.InitStr(password, TDCP_sha384);
    DCP_sha512:    C.InitStr(password, TDCP_sha512);
    DCP_ripemd128: C.InitStr(password, TDCP_ripemd128);
    DCP_ripemd160: C.InitStr(password, TDCP_ripemd160);
  end;
end;

function TForm1.Cifrar(cadena, password: string; algoritmo,hash: byte; descifrar: boolean) : string;
var
  C: TDCP_Cipher;
begin
  Result := '';
  C := TDCP_Cipher.Create(nil);
  try
    IniciarCifrador(C, algoritmo, hash, password);
    if desCifrar then
      Result := C.DecryptString(cadena)
    else
      Result := C.EncryptString(cadena);
    C.Burn;
  finally
    C.Free;
  end;
end;

Llamada a la función:
Código Delphi [-]
PassDesEncriptado := Cifrar(PassEncriptado,'',DCP_sha1,sizeof(PassEncriptado),true);

Lo que me está devolviendo el string "PassDesEncriptado" es un conjunto de carácteres extraños que para nada son los passwords correctos.

Supongo que el problema estará en lo relativo a la llamada de la función porque es la parte de cosecha propia (no soy ni mucho menos programador profesional). Los parámetros en los que solicita el password y el hash no se que enviarle exactamente.
Gracias de antemano y un saludo a todos.

dec 21-06-2006 20:51:39

Hola,

A ver si te echa una mano:

Código Delphi [-]
{
  Vamos a cifrar y descifrar una cadena utilizando
  el algoritmo "Blowfish" y el "hash" "SHA1".
}

uses
  DCPconst,  // Constantes
  UCifrador; // Función Cifrar

procedure TForm1.Button1Click(Sender: TObject);
var
  c: string;
  s: string;
begin

  // Clave (password) para el cifrado
  c := 'claveparacifrar';

  // Cadena a cifrar (por ejemplo)
  s := 'Cadena a cifrar';

  // Ciframos la cadena
  s := Cifrar(s, c, DCP_blowfish, DCP_sha1, false);

  // Mostramos la cadena "cifrada"
  ShowMessage(s); // Muestra la cadena "s" cifrada

  // Desciframos la cadena
  s := Cifrar(s, c, DCP_blowfish, DCP_sha1, true);

  ShowMessage(s); // Muestra "Cadena a cifrar"
  // es decir, la cadena vuelta a descifrar...

end;

En todo caso echa un vistazo a la ayuda que acompañan a los componentes conque tratamos.

Mick 21-06-2006 20:55:26

Sha1 es un tipo de hash no un metodo de encriptacion, lo que caracteriza un hash es precisamente que no se puede hacer la operacion contraria (calcular el texto original a partir del hash).
En definitiva no existe funcion de "desencriptacion" de un hash.
En la practica dado un hash determinado existen infinitas cadenas que producirian el mismo hash.
Existen metodos para intentar saber si una cadena genera determinado hash, pero el tema es distinto y mas complejo que una simple funcion, ataques de diccionario por ejemplo, consisten en utilizar un diccionario con miles o millones de palabras: aplicar el hash a cada una y ver si el resultado coincide con el hash original. O directamente por fuerza bruta en lugar de usar un diccionario de palabras probar a aplicar el hash a todos los millones o miles de millones de combinaciones de textos posibles de X letras.

Saludos


La franja horaria es GMT +2. Ahora son las 23:20:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi