No hay buena manera. Lo que dices es prácticamente la medida de la distancia de contraseña en nuestra mente . Es claramente imposible tener un método directo para hacerlo.
Lo segundo, lo que desea medir, depende en gran medida de la persona y, a menudo, contiene solo información conocida para él. Por ejemplo, uno de sus colegas podría usar el nombre de sus hijos en los diferentes servidores de la empresa. No es posible crear una solución de software para encontrar esto, pero algunos hackers / colega pueden tener esta información y usarla para descifrar su cuenta.
Lo que puedes hacer es un paso en el camino de la NSA: aunque no puedes espiar directamente a la gente, puedes usar Big Data para emular algunos muy similares.
Lo que necesita: información disponible públicamente en la red. Por ejemplo:
- Thesaurus
- Wikipedia (aunque no hay una forma sencilla de medir la distancia de enlace de dos palabras clave, su base de datos es simplemente descargable y puede crear un script para analizar su conectividad de enlace).
- O simplemente puede hacer búsquedas automáticas de google con la api de búsqueda de google y obtener una proporción de resultados entre la primera, entre la segunda contraseña y entre una consulta dual (por ejemplo, si la primera contraseña es "apple" y la segunda es "naranja", entonces el
Hits("apple")*Hits("orange")/Hits("apple", "orange")^2
debe estar por debajo de un límite experimental establecido por usted).
Pero tenga cuidado: no ejecute consultas que contengan las contraseñas en una nube pública no confiable, ¡fue una violación de seguridad muy seria! Por supuesto, depende solo de sus puntos de vista / consideraciones / responsabilidad, que La nube pública es de confianza para ti. Para mí, ninguno fue.
En tu lugar hice lo siguiente:
- Obtengo un espejo de wikipedia (tienen una base de datos mysql simple que se puede descargar públicamente)
- Creó un mapa de distancia de enlace (era muy simple, aunque tal vez era grande)
- Creé para que las dos contraseñas se comparen con el título de su artículo de wikipedia más cercano (probablemente necesitaba una comparación masiva de levenshtein, así que necesitarás mucha CPU)
- Finalmente utilicé la siguiente fórmula: D ("pwd1", "pwd2") = Levensheiten ("pwd1", Lev_nearest ("pwd1")) + Wiki_Link_Distance (Lev_nearest ("pwd1"), Lev_nearest (" pwd2 ")) + Levensheiten (" pwd2 ", Lev_nearest (" pwd2 "))
Extensión: wiki contiene alrededor de 1 millón de entradas de texto, lo que hace que la búsqueda más corta sea casi imposible. Seguramente implementaste esto como un C ++, y usaste algoritmos muy bien optimizados. Por lo tanto, será difícil. Como alternativa, puede hacer que use desde la wikipedia solo las palabras más comunes (que se pueden encontrar al obtener sus estadísticas de uso). Aunque la wiki en inglés tiene alrededor de unos millones de artículos, un hablante nativo de inglés sólo conoce unos diez mil de ellos.
Alguien debería escribir esto realmente, era un maravilloso demonio de código abierto en algún lugar del github :-)