Hola buenas tardes, me gustaria preguntar e informarme acerca de los juegos online en javascript son juegos seguros? son faciles de modificar? Que hace que un juego en javascript sea seguro?
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCita de: kub0x en 5 Abril 2017, 23:38 PM
Vamos que no es un cifrado sino un generador de secuencias basado en un charset específico y tu quieres hallar el algoritmo generador de las mismas. Para ello mira si hay un patrón comparando un valor y su siguiente, para ello convierte ambas a decimal segun su charset y comparalas. La fórmula subyacente puede ser una recurrencia, modular o constante. Sigo pensando que deberías darnos acceso a la información de dichas secuencias, por que con cuatro no hacemos nada.
Cita de: NEBIRE en 5 Abril 2017, 21:53 PM
Si estás en lo cierto, parece que se omiten el 0 el 1 y el 8 y las vocales.
Pero sigeun siendo muchas más que 50 millones de combianciones.
tienes para secuencias de 10 caracteres 28 elevado a la 10 (28*28*28*28*28*28*28*28*28*28)= 2.961.96.766.695.424
Si insistes en que sólo sena 50millones y estás seguro de ello, es bastante probable que exista alguna restricción no esplícitada...
Si tienes una serie de secuencias suficientemente larga, haciendo una análisis de frecuencias de sobre las propias secuencias, podría deducirse que secuencias (de x caracteres) nunca se producen y por tanto concluir ciertas reglas de exclusión que aunque compliquen sacar las combinaciones posibles, reduzcan ostensiblemente su número a una cantidad tratable. 50 millones de secuencias son una cantidad tratable, para manejar en un fichero, digo, para probar como contraseña en un lugar remoto, será excesivo si el sistema está bien diseñado).
En efecto, es estas secuencias no aparecen el 0,1,8,A,E,I,O,U
No, no solo no es una pérdida de tiempo, si no que es la forma correcta de hacerlo.
En realidad cuando hay combinaciones sin excepciones (dado un alfabeto), el alfabeto entero debe ser considerado como una base numérica, así en tu caso la base numérica es 27 (OJO: usa del 0 al 27, no del 1 al 28). De esa forma, puedes sacar las secuencia de uan forma muy veloz, o sacar la enésima secuencia de ese alfabeto, también dada una secuencia es relativamente fácil devolver la siguiente o la anterior (la nª + 1 o la nª-1...).
Así mete el alfabeto en un array...
alfabeto(0)= 2
...
Alfabeto(6)=9
Alfabeto(7)=B
...
Alfabeto(27)=Z
Dado que el tamaño de tus secuencias son 10 caracteres, fíjate que te vale generar todas las secuencias para solo 5 caracteres (algo muy accesible)...
Y finalmente en una combinación de 2 bucles iterar para tomar en el bucle interno, la contatenación de cada par de secuancias de 5 que está en activo en cada bucle.
En pseudocódigo:
Paso1: Obtener todas las combinaciones (con repetición) de 5 caracteres del alfabeto
numeroSec5= 28^5 (esto es: 17.210.368)
array alfabeto(0 a 27) (con los valores ya explicados más arriba)
Array Alfa5(0 a NumeroSec5-1) de cadenas de texto que contendrán 5 caracteres.
(k será el contador de la secuencia actual que se está construyendo)
n=0
iniciar bucle para k desde 0 hasta NumeroSec5-1
v=k
iniciar bucle para j desde 0 a 4 (5-1, un ciclo por cada caracter)
n= (v mod 28)
v = (v\28) (división entera)
concatenar detrás el valor obtenido:
Alfa5(k) = Alfa5(k) concatena Alfabeto(n)
fin bucle
incrementar k
fin bucle
Paso2: Obtener todas las combinaciones de 10 caracteres usando las secuanias de 5 obtenidas en el paso1:
Array alfa10(0 a NumeroSec5-1) (igual de largo que el de Alfa5, 17millones es accesible en la memoria del equipo, y evitamos perder tiempo escribiendo a disco).
iniciar bucle para k desde 0 hasta NumeroSec5 -1
SerieDerecha= Alfa5(k)
iniciar bucle para j desde 0 a NumeroSec5-1
Alfa10(j)= SerieDerecha concat Alfa5(j) (alfa5(j) sería la serie que se contcatena a la izquierda)
incrementar j
fin bucle
Hacer lo que quieras hacer con las secuencias obtenidas, luego serán sobrescritas...
por ejemplo pasar el array a otro programa que hará con él 'lo que sea', o guardarlas a disco (pero al final tendrán un fichero gigantesco, aseguráste que tu lenguaje puede manejar ficheros del tamaño final. Cada secuencia son 10 caracteres+ salto de línea por claridad, si lo guardas en Unicode multiplica por 2, multiplica por el número de secuencias totales: Numerosec5 * Numerosec5
incrementar k
fin bucle
Para que veas como funciona el código y que saca bien todas las secuencias, crea de prueba primero un alfabeto de 6-8 caracteres, y cambia los valores conforme al tamaño 3,4 caracteres de la semisecuencia, etc...
Cita de: NEBIRE en 5 Abril 2017, 16:10 PM
¿Reversear?. no inventes palabras... el castellano tiene palabras para expresarse bien, no hay necesidad de inventarse una nueva. De hecho, la palabra Invertir sugiere lo que dices.
No acabo de enterarme de qué quiere shacer exactamente. No te explicas bien.
Haciendo un esfuerzo, podría llegar a entender que lo que quieres es: saber cuál es el alfabeto que se ha usado para generar determinadas secuencias? (¿ves que fácil es explicarlo bien, si es esta la pregunta?)
- Si es esto, se requieren suficientes secuencias para dar por seguro que contiene todos los caracteres del alfabeto. Se podría asumir que si todos los caracteres salen con igual probabilidad y dado un largo 10 de la serie de salida, y que esta sseries son generadas al azar, usando dicho alfabeto y ese largo, se puede asegurar que en tantas series como ((largoAlfabeto^2)/largo serie ) estarán contenidos todos los caracteres que componen el alfabeto. Por ejmplo Sean 40 caracteres los que componen el alfabeto, y sean 10 el tamaño de las series que se generan, y sean generadas las series de forma aleatoria: ((40*40)/10))= 1600/10. En 160 series generazadas al azar...
Si representamos por p la probabilidad de salir un valor en una serie p= 1/40, para que salgan los 40 necesitamos 40 p. Pero esto es teórico, por ello si lo elevamos al cuadrado, es bastante seguro que garanticemos que en efecto salgan todas. Como en cada serie salen 10, entonces ese resultado final, lo podemos dividir entre 10.
Luego 40^2= 1600, es decir habremos pedido 40 veces que salga la serie completa del alfabeto (que se compone de 40 caracteres), por tanto ocn 1600 caracteres tenedremos esa garantía de que han salido. Pero como lo tomamos en series de 10, esos 1600 caracteres quedan agrupados en 160 series de 10 caracteres cada una.
El 'charset', si llamas así al alfabeto, vale... si no, entiende que no importa el orden que se siga en el alfabeto. Si damos como alfabeto las letras A-Z + 0-9, +abcd (para tener 40caracteres), poco importa que el alfabeto esté en otro orden. 0-9, + A-Z, + abcd... la secuencia: ABCDEFGHIJ, será la secuancia nº1 en el orden del alfabeto primero y la secuencia nº x si el alfabeto sigue otro orden... ¿qué importa que lugar ocupe una secuencia, si nunca hablamos en términos de la secuencia nº x?
Si dispones del número de combinaciones posibles, puedes mirar si las combinaciones son sin o con reptición... viendo la serie: "WRVDNWNRKD", veo que tanto la R, como la N como la D y la W aparecen dos veces, luego se puede concluir que es con repetición (aunque podría perfectamente fijarse un máximo de repetición de caracteres)...
Ahora bien, la cifra de 50millones es una cifra muy baja, si fueran 36 caracteres (mayúsculas A-Z) + los números (0-9), para series de 10 cifras con repetición serían 10^36 = 3.656.158.440.062.976 muy lejos de esos 50millones de combinaciones.
50 millones parece una cifra más cercana para las combinaciones posibles sin repetición... pero vemos secuencias (más de 1) que tienen caracteres repetidos.
En fin, sin más datos parte de la presunción de que se usan todoas las cifras y todas las mayúsculas y sabiendo que la longitud de la serie son de 10 caracteres, obtén al menos 130series (36*36=1296), luego recorre todas las series y obtén la lista decaracteres únicos:
Paso 1:
Contar en una tabla la aparición de cada caracter, de las series recogidas...array de serie: Series(0,1,2,3...)
Declarar array X(de 0 a 255) de tipo numerico
n=0 (primer índice en el array de series)
iniciar bucle por cada serie en series(n)
i =0 (indice del caracter en la serie)
iniciar bucle por cada caracter en la serie (sabemos que son 10, luego puede fijarse de 0 a 9
x(serie.char(i))= x(serie.char(i)) +1
incrementar i
fin bucle de serie
incrementar n
fin bucle se series
Paso 2:
Reconocer cuantos y cuales son los caracteres únicos:iniciar bucle con k de 0 a 255
Si x(k) es mayor que 0 luego
incrementar CharUnicos en 1
sacar por pantalla el caracter k
fin si
incrementar k
fin bucle
sacar por pantalla la cuenta de CharUnicos
...y si es alguna otra cosa lo que quieres, sé más espécifico, pero sobre todo sé claro... explícate bien, aunque necesites el doble de texto para hacerlo.
------
.p.d.: Si las series no se generan al azar (esto es si las secuencias son elegidas por los usuarios), no hay forma de saber cuantos caracteres forman el alfabeto del que se construyen, ya que probablemente siempre habrá caracteres que los usuarios no usen nunca o casi nunca. En ese caso tampoco importa mucho, si no se usan nunca, no habrá series que lo contengan lo que a efectos prácticos es los mismo que si el alfabeto careciera de ese carácter. Haciendo como digo, se tiene de modo muy certero los caracteres únicos que contiene el alfabeto. Aunque más exactamente sería decir los caracteres que 'aparecen' en las secuencias ("se usan" frente a "contiene" el alfabeto)).