Comprobar si la encriptacion se ha producido C++

Z

Tengo este constructor en mi clase

Clave::Clave(const char* c){
	if(strlen(c)<5)
		throw Incorrecta(CORTA);
	else{
		time_t semilla = time(0);
		srand(static_cast<unsigned int>(semilla)); 
		const char sal[] = { saltchars[rand() % 64], saltchars[rand() % 64] };
		cadena=crypt(c,sal);
	}
}

Como puedo comprobar que

cadena=crypt(c,sal);

se ha hecho correctamente?el método crypt devuelve un puntero a char pero no se exactamente que continene y si puedo usarlo para comprobar la encriptación

sasher

Vaya lío, ya que usas C++ y veo que empleas cosas como excepciones y static_cast, podrías haber usado los análogos del lenguaje para números aleatorios y cadenas.

A tu pregunta, ¿por qué simplemente no imprimes el valor de

cadena

a ver que contiene?

1 respuesta
Z

#2 Yo se que se hace bien pero lo que necesito ,es que haga la comprobación, porque así me lo piden esto es para la universidad.
algo asi

if(la encriptacion es correcta)
     lo que sea
else
     throw exception

Edito:
Lo he echo asi y parece que funciona, seria correcto asi?

Clave::Clave(const char* c){
	if(strlen(c)<5)
		throw Incorrecta(CORTA);
	else{
		time_t semilla = time(0);
		srand(static_cast<unsigned int>(semilla)); 
		const char sal[] = { saltchars[rand() % 64], saltchars[rand() % 64] };

	char* temp= crypt(c,sal);
	if(temp==nullptr)
		throw Incorrecta(ERROR_CRYPT);
	else
		cadena=temp;
}
}
1 respuesta
sasher

#3 O directamente:

Clave::Clave(const char* c){
  if(strlen(c)<5)
    throw Incorrecta(CORTA);
  else{
    time_t semilla = time(0);
    srand(static_cast<unsigned int>(semilla));
    const char sal[] = { saltchars[rand() % 64], saltchars[rand() % 64] };

cadena = crypt(c,sal);
if(!cadena) throw Incorrecta(ERROR_CRYPT);
  }
}

Pero vamos, así solo te estás asegurando de que el puntero no sea nulo, no de si el cifrado se ha hecho correctamente o no. Habría que ver la implementación de crypt para ver que hace y si controla los casos en que el cifrado no se haga correctamente.

Z

Según la documentación devuelve " On success, a pointer to the encrypted password is returned. On
error, NULL is returned."

1 respuesta
B

#5 Si en la documentación pone eso tu única responsabilidad es comprobar que, efectivamente, no te devuelve un puntero a NULL. En teoría deberías "fiarte" que con esto todos los casos están cubiertos por quien hizo la librería de crypt en cuestión.

Usuarios habituales