used they the round online multiple keys example cipher are encoding cryptography key

encoding - they - vigenere cipher encoder



¿Cómo puedo generar una clave única, pequeña, aleatoria y fácil de usar? (5)

Así es como lo haría.

Obtendría una lista de palabras comunes en inglés con frecuencia de uso y cierta información gramatical (como ¿es un sustantivo o un verbo?). Creo que puedes mirar alrededor de los intertubes para ver alguna copia. Firefox es de código abierto y tiene un corrector ortográfico ... por lo que debe ser obtenible de alguna manera.

Luego, le puse un filtro para que se eliminen las palabras oscuras y se excluyan las palabras que son demasiado largas.

Entonces mi algoritmo de generación elegiría 2 palabras de la lista y las concatenaría y agregaría un número aleatorio de 3 dígitos.

También puedo aleatorizar el patrón de selección de palabras entre verbos / sustantivos como

eatCake778
pickBasket524
rideFlyer113 etc.

el caso no necesita ser una carcasa de camello, puedes aleatorizar eso también. También puede aleatorizar la ubicación del número y el verbo / sustantivo.

Y como eso es una gran cantidad de aleatoriedad, Jeff''s The Danger of Naïveté es una lectura obligada. También asegúrese de estudiar ataques de diccionario con bastante antelación.

Y después de que lo implementé, hice una prueba para asegurarme de que mis algoritmos nunca colisionen. Si la tasa de colisión fuera alta, jugaría con los parámetros (cantidad de sustantivos utilizados, cantidad de verbos usados, longitud del número aleatorio, cantidad total de palabras, diferentes tipos de tripas, etc.)

Hace unos meses me encomendaron la tarea de implementar un código único y aleatorio para nuestra aplicación web. El código debería ser fácil de usar y lo más pequeño posible, pero seguir siendo esencialmente aleatorio (por lo que los usuarios no podrían predecir fácilmente el próximo código de la secuencia).

Terminó generando valores que se parecían a esto:

Af3nT5Xf2

Desafortunadamente, nunca estuve satisfecho con la implementación. Los de Guid estaban fuera de discusión, simplemente eran demasiado grandes y difíciles para que los usuarios ingresaran. Esperaba algo más parecido a 4 o 5 caracteres / dígitos, pero nuestra implementación particular generaría secuencias notablemente modeladas si codificáramos para menos de 9 caracteres

Esto es lo que terminamos haciendo:

Recopilamos una identificación secuencial única de 32 bits de la base de datos. Luego lo insertamos en los bits centrales de un entero RANDOM de 64 bits. Creamos una tabla de búsqueda de caracteres fácilmente tipados y reconocidos (AZ, az, 2-9 omitiendo caracteres fácilmente confusos como L, l, 1, O, 0, etc.). Finalmente, usamos esa tabla de búsqueda para codificar en base 54 el entero de 64 bits. Los bits altos eran aleatorios, los bits bajos eran aleatorios, pero los bits centrales eran secuenciales.

El resultado final fue un código que era mucho más pequeño que un guid y parecía aleatorio, aunque no lo era en absoluto.

Nunca estuve satisfecho con esta implementación en particular. ¿Qué habrías hecho?


En .NET puede usar el método GetBytes () de RNGCryptoServiceProvider que "llenará una matriz de bytes con una secuencia criptográficamente fuerte de valores aleatorios" (de la documentación de ms).

byte[] randomBytes = new byte[4]; RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); rng.GetBytes(randomBytes);

Puede aumentar el largo de la matriz de bytes y obtener los valores de los caracteres que desea permitir.


En C #, he usado el método '' System.IO.Path.GetRandomFileName (): String '' ... pero estaba generando sal para los nombres de los archivos de depuración. Este método devuelve cosas que se parecen a su primer ejemplo, excepto con una extensión de archivo aleatorio ''.xyz'' también.

Si estás en .NET y solo quieres una solución más simple (pero no "más bonita"), diría que esto es ... podrías eliminar la extensión de archivo aleatorio si quieres.


Puede cargar su lista de palabras como chakrit sugerido en una tabla de datos o archivo xml con una clave secuencial única. Cuando obtenga su palabra al azar, use un generador de números aleatorios para determinar qué palabras buscar con su clave. Si concatenas 2 de ellos, no creo que necesites incluir los números en la cadena a menos que la "verdadera aleatoriedad" sea parte del objetivo.


Si, por amigable para el usuario, quiere decir que un usuario podría escribir la respuesta, entonces creo que le convendría mirar en otra dirección. He visto y hecho implementaciones para contraseñas aleatorias iniciales que eligen palabras y números aleatorios como una cadena más fácil y menos propensa a errores.

Si bien estás buscando una forma de codificar un código aleatorio en la cadena URL, que es un problema que he tratado por un tiempo, entonces lo que he hecho es usar GUID codificados de 64 bits.