es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

rutinas de sobre digital: descifrado incorrecto en archivo grande | programación en C

La escuela nos dio un proyecto (encriptar archivos de un directorio y luego desencriptarlo)
el profesor nos dio una parte del código. Aquí está https://pastebin.com/g4BfVA8a

Entonces mi script funciona bien con un tamaño pequeño, puedo encriptar y desencriptarlo sin problemas.
Pero cuando intento en /home, al desencriptarlo obtengo este error:

rm: no se puede eliminar ‘/home/kali/.mozilla/firefox/Crash’: No existe el archivo o el directorio
rm: no se puede eliminar ‘Reports/InstallTime20200914174320.Pwnd’: No existe el archivo o el directorio
140470750399488:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:../crypto/evp/evp_enc.c:610:
zsh: abort sudo ./main -p /home/kali -d 28924fd9021642cee4002de561b52640

Mi clave/IV no puede estar mal porque lo copié y pegué del servidor que escribí.
¿Alguna idea?
Pequeña parte de mi script:

si (esta_encriptado(abs_path))
{
si (desencriptar(clave, iv, abs_path))
{
char str[4099];
sprintf(str, “rm %s”, abs_path);
system(str);
}
else
{
manejarErrores();
printf(“%s causó el error”, abs_path);
}
}

Consulte los comentarios, aquí hay más código. Así es como declaro el tamaño de mi clave/IV.

int tamañoClave = AES_256_KEY_SIZE;
int tamañoIV = AES_BLOCK_SIZE;
unsigned char clave[AES_256_KEY_SIZE];
unsigned char iv[AES_BLOCK_SIZE];
char pClave = (char)malloc(sizeof(clave)2+1);
char *pIV = (char
)malloc(sizeof(iv)*2+1);

en

generar_clave(clave, tamañoClave, iv, tamañoIV, pClave, pIV);
int generar_clave(unsigned char *clave, int tamañoClave, unsigned char *iv,
int tamañoIV, char *pClave, char *pIV)
{
RAND_bytes(clave, tamañoClave);
RAND_bytes(iv, tamañoClave);
bytes_a_hexa(clave, pClave, tamañoClave);
bytes_a_hexa(iv, pIV, tamañoIV);
return 1;
}

luego enviándolo a mi servidor.

cuando desencripto hago:
./main -p RUTA -d CLAVE IV
mientras que la clave y el iv se convierten nuevamente en bytes clave/iv.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el error ocurre durante el proceso de desencriptación, específicamente en la llamada a la función EVP_DecryptFinal_ex. Esto podría indicar que la clave de desencriptación y/o el IV no son correctos para el archivo que se está desencriptando.

    Una cosa para verificar es si la clave y el IV se generaron correctamente y se están pasando correctamente a la función de desencriptación. Podría ser útil agregar algunas declaraciones de registro o imprimir los valores de la clave y el IV antes y después de pasarlos a la función de desencriptación.

    Otro problema posible podría estar relacionado con el tamaño o la codificación del archivo. Sería útil verificar si el archivo que se está desencriptando tiene el mismo tamaño y formato que el archivo encriptado original.

    En general, sería útil ver más del código, especialmente las funciones is_encrypted y decrypt, con el fin de localizar el problema de manera más precisa.

Comments are closed.