Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-05-2011
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 16
fide_uci Va por buen camino
Question Calcular la complejidad de una cotraseña

Hola amigos. Estoy haciendo un programa para administrar los usuarios de mi centro de trabajo y entre las tantas opciones existe una que es la de cambiar la contraseña del usuario seleccionado. Esta funcionalidad ya la he implementado y trabaja de maravillas. Ahora lo que necesito es que a medida que se valla escribiendo el password que se le va a asignar al usuario pues se vea un indicador que muestra el nivel de complejidad de la cotraseña que se esta escribiendo. Podria ser por ejemplo.

Nivel de Complejidad:
Baja
Media
Alta
Muy Alta

Algo como esto es lo que necesitaria. Hasta donde se para que una contraseña sea bastante segura debe cumplir con al menos tres de los siguientes requerimientos.

Tener 8 o más caracteres de longitud.
Contener Letras Minusculas.
Contener letras mayusculas.
Contener Numeros.
Contener Simbolos ( @, _, -, +,=, !, #, ., /)
Que no contenga palabras comunes, sustantivos o cosas así.

Pero bueno no se me ocurre como calcular la complejidad. Alguien que tenga experiencia o me pueda ayudar con este tema se lo voy a agradecer eternamente. Gracias desde ya.
Responder Con Cita
  #2  
Antiguo 05-05-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por fide_uci Ver Mensaje
1.Tener 8 o más caracteres de longitud.
2. Contener Letras Minusculas. Contener letras mayusculas.
3. Contener Numeros.
4. Contener Simbolos ( @, _, -, +,=, !, #, ., /)
5. Que no contenga palabras comunes, sustantivos o cosas así.

Puedes darle un porcentaje a cada uno de esos apartados, por ejemplo, si tiene más de 8 caracteres le sumas 20. Si tiene mayúsculas y minúsculas le sumas otro 20, si tiene números le sumas otro 20.
Como hay 5 apartados, por 20 puntos cada uno= 5*20=100%
Entonces si cumple con todos, o sea, el valor es 100, es muy segura.
Si se queda en 80, segura.
Si se queda sólo en 20, insegura.
Si se queda en 0, es una birria de contraseña o no ha puesto ninguna
Responder Con Cita
  #3  
Antiguo 05-05-2011
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 16
fide_uci Va por buen camino
Ajajaja, amigo mio si. Entiendo tu punto y pense en hacerlo asi. Ahora una cosa. Como era que se verificaba si un caracter estaba en un conjunto dado, ejemplo 'a'..z, 'A'..'Z', '0'..'9',
era in o sea char in 'a'..'z' o algo asi no?

Lo otro, como puedo saber si es un sombolo lo que esta en la posicion de un caracter. Ejemplo. *, &, #, $, % ! etc. ??
Responder Con Cita
  #4  
Antiguo 05-05-2011
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 16
fide_uci Va por buen camino
Me pueden decir por que este codigo no me funciona?.
La parte donde valido si el caracter esta en un conjunto no se ejecuta, por que puede ser?

Código Delphi [-]
var
  vLetras_Up_Set: set of 'A'..'Z';
  vLetras_Low_Set: set of 'a'..'z';
  vNum_Set: set of '0'..'9';
  vActChar: Char;
  vX, vComplejidad: Integer;
  vLetraMinContada, vLetraMayuscContada, vNumeroContado, vSimboloContado: Boolean;
begin

  //si el caracter que se esta procesando no esta en ningunode estos conjuntos,
  //entonces debe ser un simbolo u otro caracter y se incrementa el contador.

  if edt_new_pass_show.Text = '' then
    Exit;

  edt_new_pass.Text := edt_new_pass_show.Text;
  vComplejidad := 0;
  vLetraMinContada := False;
  vLetraMayuscContada := False;
  vNumeroContado := False;
  vSimboloContado := False;
  
  //Aqui es donde se calcula todo
  for vX := 1 to Length(edt_new_pass_show.Text) do
    begin
      vActChar := edt_new_pass_show.Text[vX];

      //El caracter actual es una mayuscula
      if (vActChar in vLetras_Up_Set) and not vLetraMayuscContada then
        begin
          ShowMessage('Se conto una mayuscula');
          Inc(vComplejidad);
          vLetraMayuscContada := True;
        end
      else
      //El caracter actual es una minuscula
      if (vActChar in vLetras_Low_Set) and not vLetraMinContada then
        begin
          Inc(vComplejidad);
          vLetraMinContada := True;
        end
      else
      //El caracter actual es un numero
      if (vActChar in vNum_Set) and not vNumeroContado then
        begin
          Inc(vComplejidad);
          vNumeroContado := True;
        end  
      else
      //El caracter actual es un simbolo
      if not vSimboloContado then
        begin
          ShowMessage('Se conto un simbolo');
          Inc(vComplejidad);
          vSimboloContado := True;
        end;  
    end;


   //ShowMessage(IntToStr(vComplejidad));
  //Si la longitud es menor de 8 caracteres entonces no es segura para nada
  if Length(edt_new_pass_show.Text) < 8 then
    vComplejidad := 1
  else
    Inc(vComplejidad);

  case vComplejidad of
    1: lb_complejidad.Caption := 'Complejidad: Extremadamente insegura';
    2: lb_complejidad.Caption := 'Complejidad: Poco segura';
    3: lb_complejidad.Caption := 'Complejidad: Segura';
    4: lb_complejidad.Caption := 'Complejidad: Muy Segura';
    5: lb_complejidad.Caption := 'Complejidad: Extremadamente segura';
  end;

end;
Responder Con Cita
  #5  
Antiguo 05-05-2011
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 22
gatosoft Va camino a la fama
Varias observaciones...

1) seria prudente encerrar cada condicion compuesta de los if en paréntesis...

Código Delphi [-]
  if (vActChar in vLetras_Up_Set) and not vLetraMayuscContada then

Código Delphi [-]
 if (vActChar in vLetras_Up_Set) and (not vLetraMayuscContada) then

Solo un capricho, pero la experiencia despues te dirá por que...

2) tienes un problema de logica con los if.. else if...

por ejemplo, si tienes un password como: "hola"

entonces... la primera vez evalua y encuentra una minuscula..
la segunda vez que pasa por el for, no entra a la minuscula, sino que va derecho al caracter... y en adelante no cuenta nada... total: una minuscula y un caracter para la palabra "hola".

dices que no llega a evaluar carcateres?? es poco probable, pues casi todo va a parar alla... hiciste un seguimiento paso a paso?? has revisado lo que almacenan los conjuntos... es decir, no es lo mismo si trabajas con delphi 7 a delphi 2010, pues en este útlimo hay cambios de char a ansichar... revisa este tema


3) Veo que si el password es menor de 8 caracteres automaticamente reseteas la coplejidad a uno... yo preferiria dar pesos a cada condicion, es decir:

1) que tenga mas de 8 caracteres: 30 puntos
2) que tenga una minuscula: 5 puntos
3) que tenga una mayuscula: 20 puntos
4) que tenga un carcater: 30 puntos.
5) que tenga un numero: 15 puntos

total 100 puntos... y evaluas la complejidad segun la puntuación... es casi lo mismo... pero...
Responder Con Cita
  #6  
Antiguo 05-05-2011
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por gatosoft Ver Mensaje
1) seria prudente encerrar cada condicion compuesta de los if en paréntesis...
No sólo es prudente sino que muchas veces es imprescindible, ya que la precedencia de los operadores lógicos está al mismo nivel que los aritméticos, no como en otros lenguajes como el C donde están en otro nivel.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Calcular formulas tocomi Varios 2 22-12-2008 22:06:20
¿Cuál sería la relación Modularidad/Complejidad que se estaría dispuesto a tolerar? Delphius Debates 35 16-02-2008 07:13:10
Programas que calculan la complejidad operacional Delphius Varios 5 19-01-2007 10:34:34
calcular duracion mp3 madriles Varios 5 10-08-2005 16:20:24
Calcular exponente [Gunman] Varios 0 18-04-2005 13:28:39


La franja horaria es GMT +2. Ahora son las 21:28:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi