Es posible Reversear una Secuencia Alfanumerica?

Iniciado por Sapote, 5 Abril 2017, 08:18 AM

0 Miembros y 1 Visitante están viendo este tema.

Sapote

Bueno me gustaría conocer la secuencia de una serie alfanumerica.
Me gustaria  saber si estoy haciendolo correctamente, lo primero que estoy intentando es recopilar información por ejemplo se que los Codigos Alfanumericos son de 10 caracteres,creo que el siguiente paso es conocer el charset pero no se cuantas muestras necesito. Tambien se que son 50,474,440 combinaciones dentro de la secuencia final.

Un Ejemplo de las Muestras


79JHZHZF2N
6LQP3XT3YD
WRVDNWNRKD
KV36TVN57W



¿Que me recomiendan seguir haciendo o que pasos pueden ayudar?


Gracias Saludos

Serapis

#1
¿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)).

Sapote

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)).


Hola muchas gracias por tu respuesta, te comento quiero conocer códigos validos que lleven la misma secuencia que los anteriores digamos asi códigos que pertenezcan a ese grupo de 50 millones.


Conseguí un par de muestras mas y ahora si conozco el alfabeto por el cual están compuestos.

2345679 B C D  F  G  H  J  K  L  M  N  P  Q  R  S  T  V  W  X  Y  Z

79JHZHZF2N
6YC9F2Z69X
DCRNQLPS4X
72GDNZ7NSH
YBG5QV9JQF
Q6DM74W7F4
YGWDSTP424
H49YCNZY4G
ZVZ56HTLD4
9L52BCKMBT
JGNTF9V9S6
KRCX5L4HTW
TJNZVTN6MB
LHVHBMDVYQ
KF2SQMJTNG
3KL9MDVNFH
SLJMF9S4KM
HQY5QJYX3
5K7JXH2ZXZ
XRGLQNKJSH
WBM2LBPWS6

Lo que también he pensado es conociendo el alfabeto (charset) asignarle valores donde por ejemplo 2 equivale a 1 y 28 a Z y sustituir los valores del codigo pero no se si de plano sea una perdida de tiempo
2345679BC D  F  G  H  J  K  L  M  N  P  Q  R  S  T  V  W  X  Y  Z
123456789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28




Serapis

#3
Cita de: Sapote en  5 Abril 2017, 18:01 PM

Hola muchas gracias por tu respuesta, te comento quiero conocer códigos validos que lleven la misma secuencia que los anteriores digamos asi códigos que pertenezcan a ese grupo de 50 millones.


Conseguí un par de muestras mas y ahora si conozco el alfabeto por el cual están compuestos.

2345679 B C D  F  G  H  J  K  L  M  N  P  Q  R  S  T  V  W  X  Y  Z

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).

Cita de: Sapote en  5 Abril 2017, 18:01 PM
79JHZHZF2N
6YC9F2Z69X
DCRNQLPS4X
72GDNZ7NSH
YBG5QV9JQF
Q6DM74W7F4
YGWDSTP424
H49YCNZY4G
ZVZ56HTLD4
9L52BCKMBT
JGNTF9V9S6
KRCX5L4HTW
TJNZVTN6MB
LHVHBMDVYQ
KF2SQMJTNG
3KL9MDVNFH
SLJMF9S4KM
HQY5QJYX3
5K7JXH2ZXZ
XRGLQNKJSH
WBM2LBPWS6
En efecto, es estas secuencias no aparecen el 0,1,8,A,E,I,O,U

Cita de: Sapote en  5 Abril 2017, 18:01 PM
Lo que también he pensado es conociendo el alfabeto (charset) asignarle valores donde por ejemplo 2 equivale a 1 y 28 a Z y sustituir los valores del codigo pero no se si de plano sea una perdida de tiempo
2345679BC D  F  G  H  J  K  L  M  N  P  Q  R  S  T  V  W  X  Y  Z
123456789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
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...

Sapote

#4
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...


Dándole valores a los códigos conseguí un resultado curioso, sumando todos los valores obtube 3 valores finales consecutivos 152,153,154.  Eso significaria que puede existir una probabilidad en ser consecutivos dentro de la serie?  
Ya que las posibilidades de hacer esos mismos valores con combinaciones diferentes son varias.

De ser asi que si son consecutivos en la serie con 3 valores podria conocer la secuencia completa o tambien se necesitarian mas muestras de ese tipo?

Gracias!

Serapis

No entiendo tu pregunta, eres muy escueto y poco claro.
Tampoco hace falta que cites cada vez todo mi mensaje previo, cita si lo precisas un trozo de texto específico que quieras resaltar por algo.

A ver, haciendo un poco de intuición a ver cuanto me equivoco...

En efecto fíjate que el bucle externo (del paso 1), va recorriendo numeros de la base numérica x. Al caso la base numérica ahora mismo es decimal, por eso empezamos en 0 (con K) y tras cada iteración lo incrementamos en 1) y lo que hacemos en el bucle interno es cambiar dicha base decimal a la base numérica de base 28, usando los símbolos propios que usa dicho alfabeto.

...por lo tanto si no te entendí mal, si... un valor decimal 152, 153, 154 son secuencias seguidas en decimal y por tanto también lo serán en la base de destino...
Aunque como dices 'tras sumar', ahí me cuesta interpretarte... obviamente a un resultaod de una suma se llega desde diferentes sumandos... pero no estoy seguro de qué me preguntas.
el paso 2, lo que hace es reutilizar las secuencias de 5 caracteres, para reutilizarlas y generar con elllas las ecuencias de 10 (¿acaso no hicimos en el paso 1 lo mismo, crear secuencias de 1 carácter y concatenarlos hasta tener los 5, pués aquí igual, es más rápido, un modo de entenderlo:
Imagina el hexadecimal, el valor ff acaso no es la concatenación de f + f y usando un solo carácter acaso no recorre los valores de 0 a 15?... Haz dos bucles en el primero recorrre de 0 a 15 y en el segundo haz lo mismo, concatena dentro de ese segundo , el valor actual del primer bucle con el actual del segundo bucle... así en el primer ciclo del bucle externo (el primero), obtienes dentro del segundo bucle (el interno), los valores 00, 01, 02... 0C, 0D, 0F.

Si tienes alguna duda, intenta explicarte más claro... si no voy 'pegando tiros a todo lo que semueve', en vez de apuntar a la diana...

-------------------------------------
NOTA: Hice una pequeña corrección, ya que al borrar un comentario que me parecía un poco confuso, por error me comí también una línea antes de enviarlo, y no me dí cuentas hasta más tarde.... por tanto repasa el pseudocódigo (del paso1), para asegurarte que lo has transcrito al lenguaje que utilices correctamente (es decir después de la corrección, que yo he hecho).

kub0x

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.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


Sapote

#7
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.

Exacto es un generador de secuencias, perdón mi brutal ignorancia pero diste en el clavo.

Actualmente cuento con estas muestras unicamente.

79JHZHZF2N
6YC9F2Z69X
DCRNQLPS4X
72GDNZ7NSH
YBG5QV9JQF
Q6DM74W7F4
YGWDSTP424
H49YCNZY4G
ZVZ56HTLD4
9L52BCKMBT
JGNTF9V9S6
KRCX5L4HTW
TJNZVTN6MB
LHVHBMDVYQ
KF2SQMJTNG
3KL9MDVNFH
SLJMF9S4KM
HQY5QJYX3
5K7JXH2ZXZ
XRGLQNKJSH
WBM2LBPWS6



El paso que hice recientemente fue hacer la siguiente tabla para cada charcode

2345679BCD  F  G  H  J  K  L  M  N  P  Q  R  S  T  V  W  X  Y  Z
0123456789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27


Y sustituir los valores de los códigos y encontré 3 que la suma de los valores dan consecutivos, apesar de que pueden existir 128 combinaciones posibles que pueden dar el mismo resultado


Los valores son los siguientes


14+10+0+21+19+16+13+22+17+11 //143
KF2SQMJTNG
27+23+27+3+4+12+22+15+9+2  // 144
ZVZ56HTLD4
14+20+8+25+3+15+2+12+22+24 // 145
KRCX5L4HTW




Después de eso saque la diferencia de cada valor y conseguí esto pero creo que no sirve de mucho.

13+13+27+10+13+24+9+21+20+19 // total de la diferencia entre 143 y 144
14+25+8+22+26+3+8+25+13+22  // total de la diferencia entre 144 y 155




Serapis

#8
Cita de: Sapote en 10 Abril 2017, 05:01 AM
Buenas tardes, gracias por el apoyo con respecto al post, te queria preguntar respecto a encontrar el algoritmo generador de codigos es posible con los datos que recopile o es muy dificil casi imposible?
No hay razón para preguntar ni responder sobre el asunto por privado...


El problema es que aún no sé exactamente qué es lo que quieres hacer... no te explicas con claridad. Yo 'disparo' a todo lo que señalas, pero luego parece ser una falsa alarma, y lo que quieres está por ahí, pero no es eso. No se puede andar jugando al gato y al ratón...
...Por ejemplo cuando dices que "sumas los valores de las letras de una secuencia"... no entiendo cuál es el objetivo, me pierdo. Explícate bien.

Si lo que quieres es simplemente, generar secuencias similares, es decir de tamaño 10 y usando ese alfabeto, es incluso más simple...
Ya que todo lo que tendrías que hacer es poner un bucle de 10 ciclos, donde obtienes al azar una letra del alfabeto en cada ciclo y vas concatenado las letras obtenidas (poco importa si la concatenas detrás o delante) y listo... pero ¿ves?... sigo disparando a ciegas. No es acertado decir cosas por ver si acierto con lo que tu quieres conseguir. debes primero encontrar las palabras que expliquen que necesitas, así yo te explico claramente cómo hacerlo... pero una sola cosa, no doscientas explicaciones y luego ninguna resulta ser aunque parecía que andabara cerca.


-----------
p.d.:
- Y si lo que querías era un algoritmo generador de secuencias usando ese alfabeto, es lo que te describo en el último párrafo.
- Pero si lo que quieres es generar todas las secuencias posibles de ese alfabeto, ya está explicado en algún mensaje previo...
- o si solo x secuencias seguidas, partiendo de otra dada, también está casi explicado del todo (aunque repartido en partes, solo falta entender bien lo que he escrito).
- Por último, si lo que quieres es encontrar un algoritmo que genere secuencias de "forma idéntica"* a como lo genera otro algoritmo, ningún número de secuencias obtenidas por ese algoritmo será suficiente... sería preciso para ello tener el algoritmo (el programa) y desemsamblarlo... básicamente porque se supone que las secunacias las generará de alguna forma aleatoria o pseudoaleatoria. Esa parte la desconocemos hasta el momento actual.
*(por "forma idéntica" quiero decir: que genere las secuencias de forma aleatoria, las mismas y en el mismo orden en que las genere el programa de donde las obtienes).



Sapote

Te comento lo que busco es el el algoritmo generador de los codigos, pero que este dentro del parámetro de los 50 millones de combinaciones que son funcionales.


- Y si lo que querías era un algoritmo generador de secuencias usando ese alfabeto, es lo que te describo en el último párrafo.


Segui parte del codigo que dejaste y termine creando un generador que entregaba las 270 millones de combinaciones pero realmente no tuve un gran avance.



Analizando las muestras encontre este codigo que en especial me llamo mucho la atencion, ya que pinta para ser consecutivo y tiene una cadena muy similar al final.   

3KL9MDV NFH  - 2+15+16+7+17+10+24+18+11+13 // 133 
72GDNZ7 NSH -  6+1+12+10+18+28+6+18+22+13 // 134