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.