Foros aprenderaprogramar.com

Aprender a programar => De todo un poco... => Mensaje iniciado por: joburu en 30 de Noviembre 2013, 17:50

Título: gramática para generar contraseñas expresiones regulares y alternativas alfabeto
Publicado por: joburu en 30 de Noviembre 2013, 17:50
Buenas, te hago una consulta respecto a un Trabajo Practico relacionado a Lenguajes.

Me piden realizar una plataforma que restrinja las contraseñas posibles (limitando caracteres alfanuméricos, longitudes, etc.) para poder realizar un seguimiento de las contraseñas usadas.
-Definir un conjunto de contraseñas.
-Generar una gramática de la contraseña.

El problema que tengo es referente al enunciado; como elijo las contraseñas, su longitud y formato.

Título: Re:gramática para generar contraseñas
Publicado por: joburu en 30 de Noviembre 2013, 17:56
O sea, si quiero hacerla simple: Considero un alfabeto de 5 letras, creo una gramática y sus producciones y tengo un ejercicio como cualquiera del tema.
Pero eso no sería una contraseña (si es libre, uno no está obligado a empezar siempre con, por ejemplo, "a", poner cualquier cosa en el medio y terminas con "d", tan limitada en caracteres y con una estructura tan rígida, pierde el concepto de contraseña).
Ahora bien, si consideramos contraseñas más libres de un alfabeto de diez números (de 0 al 9) donde uno puedo empezar y terminar con cualquier número (más los del medio), se torna muy engorrosa la expresión regular (y no hablemos de una combinación mucho más amplia de letras y números).

Si hago como en los cajeros automáticos que usan 4 digitos y pongo como condición que la longitud es igual a 4, pero al hacer la expresión regular quedaría así: L={0123456789012345678901234567890123456789, cada una con un exponente distinto} ni que hablar del autómata que quedaría un monstruo!
Título: Re:gramática para generar contraseñas
Publicado por: nosferacento en 01 de Diciembre 2013, 11:21
Te respondo a través de un nuevo tema del foro para no mezclar
Título: Re:gramática para generar contraseñas
Publicado por: nosferacento en 01 de Diciembre 2013, 11:45
Supongamos que quieres crear una contraseña que puede constar de cinco letras: a, b, c ó d, ordenadas de cualquier manera.

Una expresión regular sería:

E = (a | b | c | d | e) , con esta expresión decimos que E es bien a, bien b, bien c, bien d o bien d.

La contraseña sería:

Contraseña = EEEEE, con esta expresión decimos que la contraseña se genera concatenando cinco veces la expresión regular E. También podríamos escribirlo así: Contraseña = (a | b | c | d | e) (a | b | c | d | e) (a | b | c | d | e) (a | b | c | d | e) (a | b | c | d | e) pero esta expresión es más farragosa.

Expresado en forma de gramática tendríamos:


Contraseña -- > EEEEE
E -- > a | b | c | d | e


Una contraseña de 4 dígitos como expresión regular sería:

D = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Contraseña = DDDD

Expresado en forma de gramática sería:

Contraseña -- > DDDD

D -- > 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9


Hay una notación para expresiones regulares que nos permite hacer la escritura más cómoda que es la notación de conjuntos. La notación es [A-Z] indica "cualquier letra mayúscula comprendida entre la A y la Z"; [A-Za-z] indica cualquier letra mayúscula o minúscula entre la a y la z. Por último [0-9] indica cualquier dígito comprendido entre 0 y 9. Puedes restringir los conjuntos, por ejemplo [m-z] significa cualquier letra minúscula entre la m y la z, o [5-8] indica cualquier número entre el 5 y el 8.

De esta manera podríamos definir una contraseña de longitud 4 caracteres que admita letras mayúsculas, minúsculas o dígitos de esta manera:

Como expresión regular:

letra = [A-Za-z]
digito = [0-9]
Caracter = letra | digito
contraseña = CaracterCaracterCaracterCaracter

La gramática suele generarse apoyándonos en las expresiones regulares, que son considerados terminales de la gramática. En este caso la gramática sería:

Contraseña -- > CaracterCaracterCaracterCaracter


Nota: el símbolo de elección "|" también se representa a veces usando el símbolo "+"