anterior índice siguiente

Apéndice C. Como pedir una password a un usuario

Nuestros ejemplos de PBE utilizaban una cadena de caracteres fija como password. Generalmente la fuente de la password es el usuario. Por este motivo, EVP proporciona tres funciones que permiten gestionar un prompt. Son las siguientes:

  • int EVP_read_pw_string(char *buf,int length,const char *prompt,int verify);
  • void EVP_set_pw_prompt(char *prompt);
  • char *EVP_get_pw_prompt(void);

La de mayor utilidad es la primera. EVP_read_pw_string() permite leer una password que almacena en un buffer (buf) de tamaño length sin eco (no aparece en pantalla lo que se escribe). Introduce un '\0' al final del password introducido. El parámetro prompt es el mensaje que recibirá el usuario (por ejemplo: "Introduzca una password: ") y verify permitirá verificar la password introducida. Vamos a ver un ejemplo.




Ejemplo 1. Petición de una password sin verificación.

La función devuelve 0 si todo fue correcto, 1 si hubo un error por parte del usuario o del programador y -1 en caso de un fallo en el sistema. Este último error puede producirse cuando no se ha compilado OpenSSL con soporte para DES. Esto ocurre porque la función simplemente se limita a llamar a des_read_pw_string(). Veamos otro ejemplo:




Ejemplo 2. Petición de una password con verificación.

Las otras dos funciones se utilizan para establecer un prompt. La librería utiliza un puntero estático para almacenar una cadena de caracteres que se imprimirá si prompt es NULL en la función EVP_read_pw_string(). Así pues, EVP_set_pw_string() se utiliza para hacer apuntar el puntero a una cadena de caracteres adecuada y EVP_get_pw_string() obtiene dicho puntero. Si intentamos usar el puntero sin inicializarlo previamente obtendremos un error. Veamos el último ejemplo:




Ejemplo 3. Ejemplo de utilización de EVP_set_pw_string() y EVP_get_pw_string().


anterior índice siguiente