elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  funcion validar un pasword
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: funcion validar un pasword  (Leído 3,523 veces)
feedf

Desconectado Desconectado

Mensajes: 46


Ver Perfil
funcion validar un pasword
« en: 4 Julio 2013, 22:31 pm »

buenas tardes gente tengo que hacer una funcion que valide usuario y contraseña y qe se pueda ingresar 3 veces, el tema es que cuando i=1 funciona bien pero luego en 2 y 3 no me la valida aunq ponga bien los usuarios y contraseñas yo creo que debe ser un problema con el strcmp que arrastra basura del primer bucle pero nose como limpiarlo me pueden ayudar?
Código:
void pas(char,char)
{
const char contrasenav[11]="contrasena";
const char usuariov[8]="usuario";
int i,h;
i=0;
h=0;
char contrasena[100],usuario[100];


for(i=1;i<=3;i++)
{

printf("ingrese nombre de usuario:");
fflush(stdin);
gets(usuario);

printf("ingrese la contrasena:");
do
{contrasena[h]=getch();
printf("*");
h++;
}while(contrasena[h-1]!=13);
contrasena[h-1]='\0';


  if (strcmp(usuariov, usuario)!= 0 || strcmp(contrasenav, contrasena)!=0)
{



printf("\nusuario y/o contrasena invalidos\n\n");


}

else
{
break;
}

if(i==3)
{
printf("no tiene mas oportunidades para probar");

exit(0);
}

}


En línea

CCross

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: funcion validar un pasword
« Respuesta #1 en: 5 Julio 2013, 00:41 am »

Yo lo dejaria mas o meno asi

Código
  1. void pass(char *nombre, char *mi_clave)
  2. {
  3.    const char clave[] = "contrasena";
  4.    const char usuario[] = "usuario";
  5.  
  6.    int cierto = 0, intentos = 3;
  7.  
  8.    do
  9.    {
  10.        printf("\nIntroduzca nombre de usuario: ");
  11.        scanf("%s", nombre);
  12.  
  13.        printf("\nIntroduzca la clave: ");
  14.        scanf("%s", mi_clave);
  15.  
  16.        if(strcmp(clave, mi_clave)==0 && strcmp(usuario, nombre)==0) {
  17.          printf("\nUsuario y/o contrasena validos");
  18.          cierto = 1;
  19.         }
  20.        else if( intentos ) {
  21.          printf("\nAcceso Denegado ...intentos restantes %d ", intentos);
  22.          intentos--;
  23.        }
  24.        else {
  25.          printf("\nNo tiene mas oportunidades para probar");
  26.          break;
  27.        }
  28.     }
  29.     while(!cierto);
  30.  
  31. }
  32.  

Saludos  :)


« Última modificación: 5 Julio 2013, 00:48 am por CCross » En línea

ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: funcion validar un pasword
« Respuesta #2 en: 5 Julio 2013, 02:10 am »

Hola.

Otra forma de encarar tu código es enviando el nombre y la contraseña esperados, ejemplo:

Código
  1. ...
  2. int login(const char*, const char*);
  3.  
  4. int main()
  5. {
  6.  char* nom="pepe",* pass="1234";
  7.  if (!login(nom,pass)) {
  8.    printf("Ha agotado la cantidad de intentos. Presione una tecla para salir.");
  9.    getchar();
  10.    return 1;
  11.  }
  12.  printf("\n\n! Bienvenido %s !",nom);
  13.  getchar();
  14.  return 0;
  15. }
  16.  
  17. int login(const char* username, const char* userpaswd)
  18. {
  19.  char name[100], pwd[100], ch;
  20. int i , c;
  21.  
  22. for(i=1; i<=3; i++) {
  23.  printf("Nombre de usuario:");
  24.  scanf("%100s", &name);
  25.    while(getchar()!='\n');
  26.  
  27.  printf("Contrasena:");
  28.    c = 0;
  29.    do {
  30.      ch = getch();
  31.      printf("*");
  32.      if (ch != '\n' || ch!='\r'){
  33.        pwd[c++] = ch;
  34.      }
  35.    } while(ch != '\n' && ch !='\r' && c < 100);
  36.    pwd[c-1] = '\0';
  37.  
  38.    if (strcmp(name, username)==0 && strcmp(pwd, userpaswd)==0)
  39.      return 1;
  40.    else
  41.      printf("\n\nNombre de usuario o contrasena invalido (intento %d de 3)\n\n",i);
  42.  }
  43.  return 0;
  44. }
  45.  
  46.  

Saludos :)
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: funcion validar un pasword
« Respuesta #3 en: 5 Julio 2013, 02:49 am »

el tema es que cuando i=1 funciona bien pero luego en 2 y 3 no me la valida aunq ponga bien los usuarios y contraseñas
Si apenas empiezas en tu aprendizaje del lenguaje C lo recomendado es evitar el uso de "fflush(stdin)", gets y la biblioteca conio de Borland. Mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|.

Dos errores en esa función son la falta de los nombres de los parámetros y no inicializar a cero la variable "h" antes del bucle donde se pide la contraseña. Esto ultimo es lo que provoca que la función no reconozca la contraseña como valida.

Tampoco es necesario inicializar una variable con un valor cuando lo primero que haces con ella es almacenar otro valor:
Código
  1. i=0;
  2.  
  3. /* ... */
  4.  
  5. for (i = 1; i <= 3; i++)
En un caso así hay que eliminar (por superflua) la primera asignación.

La función con las correcciones:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4.  
  5. void val_pas(char const *nombre_ok, char const *contrasena_ok) ;
  6.  
  7. int main(void)
  8. {
  9.   val_pas("foo", "bar");
  10.  
  11.   return EXIT_SUCCESS;
  12. }
  13.  
  14.  
  15. void val_pas(char const *nombre_ok, char const *contrasena_ok)
  16. {
  17.   char nombre[100];
  18.   char contrasena[100];
  19.   int i;
  20.   int h;
  21.  
  22.   for (i = 0; i < 3; i++){
  23.      printf("Ingrese nombre de usuario: ");
  24.      fflush(stdout);
  25.      gets(nombre); /* Hay que cambiar por fgets */
  26.  
  27.      printf("Ingrese la contrasena: ");
  28.      fflush(stdout);
  29.      for (h = 0; (contrasena[h] = getch()) != '\r'; h++){
  30.         putchar('*');
  31.         fflush(stdout);
  32.      }
  33.      contrasena[h] = '\0';
  34.      putchar('\n');
  35.  
  36.      if (strcmp(nombre, nombre_ok) == 0 && strcmp(contrasena, contrasena_ok) == 0)
  37.         break;
  38.      else
  39.         puts("Nombre y/o contrasena invalidos");
  40.   }
  41.  
  42.   if (i ==3){
  43.      puts("No tiene mas oportunidades para probar");
  44.      exit(EXIT_FAILURE);
  45.   }
  46. }

Faltan algunos cambios como la sustitución de gets por fgets, no lo agregue para no hacer mas largo el programa pero es algo que debes evitar (de nuevo hay que leer la pagina sobre recomendaciones).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
feedf

Desconectado Desconectado

Mensajes: 46


Ver Perfil
Re: funcion validar un pasword
« Respuesta #4 en: 5 Julio 2013, 05:21 am »

wow muchas gracias por las respuestas me ayudaron un monton !! voy a leer el articulo que me pasaste justamente hace 2 meses aproximadamente empece a programar y aca estoy remando jaj,

ya que estoy pregunto por ejemplo ami me enseñaron a usar printf, pero veo mucha gente q usa cin y cut o veo q vos ahora usaste puts, tienen alguna diferencia?


mil gracias !
En línea

ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: funcion validar un pasword
« Respuesta #5 en: 5 Julio 2013, 10:58 am »

...
ya que estoy pregunto por ejemplo ami me enseñaron a usar printf, pero veo mucha gente q usa cin y cut o veo q vos ahora usaste puts, tienen alguna diferencia?
Hola.

Depende si estas programando en C o C++.

Como C++ está basado en C, el compilador no se quejará si utilizas printf o scanf, etc. Aunque, si estas compilando en C++, es mejor utilizar las funciones proias de él.
La situación no es reversible, no se pueden utilizar funciones propias de C++ tales como cout o cin en C.

Saludos :)
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: funcion validar un pasword
« Respuesta #6 en: 5 Julio 2013, 14:10 pm »

Rir37, se te ha olvidado quitar la librería conio  ;)
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: funcion validar un pasword
« Respuesta #7 en: 5 Julio 2013, 17:01 pm »

veo mucha gente q usa cin y cut o veo q vos ahora usaste puts, tienen alguna diferencia?
En C cuando se requiere imprimir texto con formato se utiliza printf, por ejemplo:
Código
  1. int a = 123;
  2.  
  3. /* ... */
  4.  
  5. printf("El valor de a es %d\n", a);

Para imprimir una cadena literal terminada con un avance de linea se puede utilizar printf o puts, aquí es mejor la segunda ya que el carácter '\n' se imprime automáticamente después del texto:
Código
  1. printf("hola, mundo\n");
  2.  
  3. /* O bien */
  4. puts("hola, mundo");

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
feedf

Desconectado Desconectado

Mensajes: 46


Ver Perfil
Re: funcion validar un pasword
« Respuesta #8 en: 9 Julio 2013, 17:51 pm »

interesante muchas gracias !
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
se puede crackear pasword de zip?
Ingeniería Inversa
maxmag 4 2,734 Último mensaje 10 Mayo 2007, 02:27 am
por sempus
función para validar urls
PHP
Hans el Topo 1 1,381 Último mensaje 16 Diciembre 2008, 03:58 am
por WHK
funcion para validar email
Programación Visual Basic
bomba1990 2 4,005 Último mensaje 17 Julio 2009, 00:59 am
por seba123neo
FUNCION PARA VALIDAR EDAD
Programación C/C++
carlosabcs18 6 2,915 Último mensaje 16 Julio 2014, 22:59 pm
por leosansan
no se como validar con una función, ni como cargar un vector
Programación C/C++
toomiblanco 3 1,621 Último mensaje 30 Mayo 2017, 23:19 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines