2011-07-12 13 views
6

Estoy buscando un método para crear una lista o detectar ejecuciones de teclado en una contraseña.¿Cómo puedo crear/detectar programáticamente ejecuciones de teclado en contraseñas?

Puedo resolver mi problema con criterios de contraseña como la longitud y el número de caracteres especiales necesarios.

Un ejemplo de ejecución simple de la clave podría ser "6yhn^YHN" o "zse4ZSE $".

más complicadas carreras clave podrían estar en diferentes formas, como una 'V' o 'X' (por ejemplo "mko0mju7MKO) MJU &")

La idea inicial para esto era para hacer el análisis estadístico en grandes vertederos de contraseña y viendo la prevalencia de las contraseñas de ejecutar solo las claves, pero creo que podría tener aplicaciones positivas en las herramientas de cumplimiento de la fortaleza de las contraseñas.

+0

¿En qué idioma estás tratando de hacer esto? –

+0

@ citizen-conn En este momento, soy independiente del idioma. Estoy dispuesto a trabajar con la mejor forma de hacerlo. – Evan

+0

Tenga en cuenta que la forma más fácil de aplicar una contraseña segura es generarlas de forma aleatoria y no dar al usuario ninguna opción para cambiarlas. Si restringe el espacio por reglas, en realidad está haciendo las contraseñas más débiles. – Joey

Respuesta

3

No veo cómo se relaciona esto con la expresión regular. ¿Crees que puedes hacer esto con expresiones regulares? No puedo ver cómo.

Creo que es un problema de gráficos, ¿no? Construya un gráfico con todos los bordes entre las teclas y sus vecinos, y luego recorra la entrada y vea si representa un cruce válido del gráfico. Sus "carreras más complicadas" básicamente están retrocediendo: si la siguiente tecla en la entrada no es un borde en su gráfico, regrese al principio (o tal vez retroceda una por una, si desea cubrir "T" u otras variaciones) ?) y ver si puedes seguir atravesando ...

Es una respuesta bastante vaga para una pregunta bastante vaga, ¿no crees?

+0

Gracias, creo que esto me pone en el camino correcto. No estoy seguro de lo que estaba pensando con regex, he cambiado las etiquetas para reflejar eso. – Evan

4

No vas a hacer esto con expresiones regulares.

Necesitará crear una estructura de datos gráficos que modele el teclado, cada clave es un nodo y los bordes tienen asignada una dirección (para que el nodo G tenga un borde con dirección Derecha y destino H). También podría tener un borde que vaya de una clave a su versión desplazada (o de desplazada a no desplazada). A continuación, puede probar una ejecución en una contraseña comprobando que sigue el gráfico en una dirección constante para N caracteres.

Hay un gran número de posibles carreras en un teclado, así que no estoy seguro de que una contraseña que se compone de carreras es menos seguro que otras contraseñas posibles ...

+0

heh, buena respuesta :) upvoted –

+0

Sin embargo, hay muchos menos n-path nodos en el gráfico del teclado que n-combinaciones de nodos. –

+0

Gracias por la respuesta. Voy a ir con esto Parece que Python-Graphs tiene más allá de la funcionalidad que necesito para lograr esto rápidamente. Le di a e.dan la marca de verificación desde que él ingresó justo delante de usted. – Evan

0

En realidad, esto probablemente no lo haría se tan duro. Almacenar una colección de objetos que representan personajes, con propiedades en ellos como TL, BR, T, BL (Arriba a la izquierda, derecha abajo, arriba, abajo, izquierda) así que por ejemplo:

a = RunKey.get("A"); 



public class RunKey{ 

    public static Key get(Character char){ 
     switch(char){ 
      case A,a: return new A(); 
      break; 
      // one for every letter 
     } 
    } 
} 

private class A extends RunKey implements IRunKey{ 

    public IRunKey BR(){ 
     return new Z(); 
    } 

    public IRunKey TR(){ 
     return new W(); 
    } 

    public IRunKey T(){ 
     return new Q(); 
    } 

    public Direction getDirection(Character char){ 
     tempRunKey = Runkey.get(char); 
     if (tempRunKey.T.toString == "char"){ 
      return T; 
     } 
    } 
} 

empecé a recibir loca creación de una La interfaz de "dirección" es un poco más complicada que al principio, pero solo tienes tantas complicaciones y objetos relativamente simples, por lo que si mantienes la luz, probablemente sea bastante rápida.

me siento como un lenguaje dinámico podría ser la mejor para algo como esto ...

Y sí, como otras respuestas en cuenta, expresiones regulares no funcionaría.

Cuestiones relacionadas