elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Como implementar una función que haga esto?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Como implementar una función que haga esto?  (Leído 9,798 veces)
@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Como implementar una función que haga esto?
« en: 26 Noviembre 2019, 00:41 am »

Quiero reorganizar un texto en base a la posición alfabética de cada caracter de otro texto programáticamente.

Tengo un array que contiene caracteres random:
array1 = ["H", "o", "l", "a", " "];

Y otro array que contiene el mismo número de caracteres:
array2 = ["a", "d", "m", "i", "n"];

En base al array2 quiero ordenar el array1 de la siguiente forma:

array2 = ["1", "4", "13", "9", "14"]

a = primeraPosicion
d = segundaPosicion
m = cuartaPosicion
i = terceraPosicion
m = quintaPosicion

ResultadoQueQuiero = ["H", "o", "a", "l", " "];

No consigo implementarlo.


En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Tachikomaia


Desconectado Desconectado

Mensajes: 1.199


Superhacker (es broma xD )


Ver Perfil
Re: Como implementar una función que haga esto?
« Respuesta #1 en: 26 Noviembre 2019, 02:38 am »

Me entreveré mucho, sorry, creo que es así:

Una vez obtenido esto
array2 = ["1", "4", "13", "9", "14"]
hacemos:
Código:
Si array2[0] > array2[1]
   intercambiar array1[0] y array1[1]
findelsi
Si array2[1] > array2[2]
   intercambiar array1[1] y array1[2]
findelsi
Si array2[2] > array2[3]
   intercambiar array1[2] y array1[3]
findelsi
Si array2[3] > array2[4]
   intercambiar array1[3] y array1[4]
findelsi
Repites eso 4 o 5 veces, aunque cada vez se requieren menos ifs.

Hacerlo prolijo y usando sólo 1 repetición o 2, te lo dejo a ti xD


« Última modificación: 26 Noviembre 2019, 03:56 am por Tachikomaia » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Como implementar una función que haga esto?
« Respuesta #2 en: 26 Noviembre 2019, 05:18 am »

primero reduce los numeros a su minima expresion organizativa... es decir

Código:
de ["1", "4", "13", "9", "14"]
a  [0,1,3,2,4]

la forma mas simple de hacer eso es organizar el array de manor a mayor y luego ver en que posicion estan ubicados en el original...

luego simplemente ubicar en relacion al segundo array (la letra en
  • va en
  • , la letra en [1] a [1], la letra en [2] va a [3]... etc)
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: Como implementar una función que haga esto?
« Respuesta #3 en: 26 Noviembre 2019, 16:04 pm »

Me entreveré mucho, sorry, creo que es así:

Una vez obtenido esto
array2 = ["1", "4", "13", "9", "14"]
hacemos:
Código:
Si array2[0] > array2[1]
   intercambiar array1[0] y array1[1]
findelsi
Si array2[1] > array2[2]
   intercambiar array1[1] y array1[2]
findelsi
Si array2[2] > array2[3]
   intercambiar array1[2] y array1[3]
findelsi
Si array2[3] > array2[4]
   intercambiar array1[3] y array1[4]
findelsi
Repites eso 4 o 5 veces, aunque cada vez se requieren menos ifs.

Hacerlo prolijo y usando sólo 1 repetición o 2, te lo dejo a ti xD
Muchas gracias, lo implementé de esta forma que me pareció sencilla. Lo implementé en js de forma un poco cutre jaja. Ya lo mejoraré:
Código
  1. function SMOA(TextCif, Contrasenha)
  2. {
  3. var temp = "";
  4. var temp2 = 0;
  5. var ct = Contrasenha.length;
  6.  
  7.    for(var j = 0;  j < TextCif.length; ++j)
  8.   {
  9.      for(var i = 0;  i < TextCif.length-1; ++i)
  10.      {
  11.       temp2 = i;
  12.       ++temp2;
  13.         if ( temp2 < ct || temp2 == ct)
  14.         {
  15.            if (Contrasenha[i] > Contrasenha[temp2])
  16.            {
  17.            temp += TextCif[temp2];          
  18.            TextCif[temp2]=TextCif[i];            
  19.            TextCif[i]=temp[0];
  20.            temp = "";
  21.            }  
  22.         }    
  23.      }
  24.   }
  25. return TextCif;
  26. }

Estaba intentando implementarlo como dices engel lex antes de crear el tema en el foro pero me quedaba mucho código y un batiburrillo.

Es parte de una librería sencilla en javascript que estoy creando con un cifrado que quiero que sea irrompible basándome en el principio de que todas las posibilidades son igual de frecuentes estadísticamente.

Por ejemplo "hola que tal" 12 caracteres dara un resultado que al intentar romperlo dará todas las combinaciones posibles de caracteres de 12 caracteres. Es decir, el texto original podría ser:
"aaaaaaaaaaaa" o "qbfkwusbwp1;$" o "adios amigos", etc.

Ahora estoy mirando de que forma fixear el tamaño a un tamaño concreto sin limitar la cantidad de entrada sin rompear la equidad estadística.

Los cifrados actuales basan su seguridad en capacidad de cómputo, y no me convence ya que teóricamente todos puede romperse dada X capacidad de cómputo e Y tiempo.
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Como implementar una función que haga esto?
« Respuesta #4 en: 26 Noviembre 2019, 16:59 pm »

de haber dicho en js :P es corto...


Código
  1. var original = ["H", "o", "l", "a", " "];
  2. var orden = ["a", "d", "m", "i", "n"];
  3. var copia = orden.slice();
  4. copia.sort();
  5.  
  6. var salida = [];
  7.  
  8. copia.forEach(function(item){
  9.  salida.push(original[orden.indexOf(item)] )
  10. })
  11.  
  12.  
  13.  
  14.  
« Última modificación: 26 Noviembre 2019, 17:01 pm por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.351


Ver Perfil
Re: Como implementar una función que haga esto?
« Respuesta #5 en: 27 Noviembre 2019, 16:02 pm »

St..Man... Eso es implementar una tabla indexado por otra.

Sea el ASCII. que como sabes va de 0 a 255 (que se supone es el punto de partida), donde (por ejemplo) la 'A' ocupa la posiciópn 65, pero en tu caso ocuparía la posición 0...

MiTabla(0) = ASCII(65)
igual para el resto...

Si van contíguos, podría usarse un bucle, por ejemplo supuesto el caso de una tabla con las 26 mayúsculas:
Código:
bucle para k desde 65 hastas 65 + 26
   MiTabla(n) = ASCII(k)
   n +=1
siguiente

Ahora 'Mitabla(7)' tendrá la 8ª letra, osea la 'H', el valor 72.
Posteriormente puede usarse en la forma: ASCII(Mitabla(7))


En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: Como implementar una función que haga esto?
« Respuesta #6 en: 27 Noviembre 2019, 19:22 pm »

de haber dicho en js :P es corto...


Código
  1. var original = ["H", "o", "l", "a", " "];
  2. var orden = ["a", "d", "m", "i", "n"];
  3. var copia = orden.slice();
  4. copia.sort();
  5.  
  6. var salida = [];
  7.  
  8. copia.forEach(function(item){
  9.  salida.push(original[orden.indexOf(item)] )
  10. })
  11.  
  12.  
  13.  
  14.  
Tengo que probar este código, el que implementé yo no me sirvetras hacer unos cambios.

St..Man... Eso es implementar una tabla indexado por otra.

Sea el ASCII. que como sabes va de 0 a 255 (que se supone es el punto de partida), donde (por ejemplo) la 'A' ocupa la posiciópn 65, pero en tu caso ocuparía la posición 0...

MiTabla(0) = ASCII(65)
igual para el resto...

Si van contíguos, podría usarse un bucle, por ejemplo supuesto el caso de una tabla con las 26 mayúsculas:
Código:
bucle para k desde 65 hastas 65 + 26
   MiTabla(n) = ASCII(k)
   n +=1
siguiente

Ahora 'Mitabla(7)' tendrá la 8ª letra, osea la 'H', el valor 72.
Posteriormente puede usarse en la forma: ASCII(Mitabla(7))
Esto es una tabla de equivalencias. Yo lo que quiero es desordernar en base al contenido de un array. No tiene nada que ver.

En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.351


Ver Perfil
Re: Como implementar una función que haga esto?
« Respuesta #7 en: 27 Noviembre 2019, 21:15 pm »

Tiene todo que ver... si cada valor en el array tiene siempre la misma equivalencia en el otro (perdona pero la explicación dada al comienzo es demasiado parca, como para terminar de entender su propósito).

Y si es siempre cambiante, o debe serlo, entonces usa el algoritmo de Fisher-Yates que es esa precisamente su funcionalidad.
En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: Como implementar una función que haga esto?
« Respuesta #8 en: 27 Noviembre 2019, 21:54 pm »

Ese algoritmo de barajado utiliza un algoritmo aleatorio asique no puedo reversarlo. En caso de ser un algoritmo pseudoaleatorio no es un CSRNG y podría reversarse y romperse el cifrado.
 Yo necesito desordenar en base a la contraseña para reducir los resultados estadísticos de análisis de frecuencia. Se da por hecho que el atacante no conoce la contraseña. Quiero desordenar antes de pasarle vector de inicialización. También tengo que fixear el tamaño a tamaño fijo. Mejorar la implementación, quitar código inútil, ampliar el diccionario de input y cambiar los caracteres de output para que no necesite base64.
Cifrado Live
Si se os ocurre algo mejor comentarlo.
« Última modificación: 27 Noviembre 2019, 21:57 pm por @?0!,5^34 » En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Como implementar una función que haga esto?
« Respuesta #9 en: 27 Noviembre 2019, 21:56 pm »

Ese algoritmo de barajado utiliza un algoritmo aleatorio asique no puedo reversarlo. En caso de ser un algoritmo pseudoaleatorio no es un CSRNG y podría reversarse y romperse el cifrado.
 Yo necesito desordenar en base a la contraseña para reducir los resultados estadísticos de análisis de frecuencia. Se da por hecho que el atacante no conoce la contraseña. Quiero desordenar antes de pasarle vector de inicialización. También tengo que fixear el tamaño a tamaño fijo. Mejorar la implementación, quitar código inútil, ampliar el diccionario de input y cambiar los caracteres de output para que no necesite base64.
Cifrado Live[url]
Si se os ocurre algo mejor comentarlo.

te recomiendo leer sobre como funcinoa rijandel (la base de aes) para no tener que depender de aleatorios... especialmente de aleatorios de "alto nivel"
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Como me aconsejais que haga esto en PHP?
PHP
vicmarcal 6 2,803 Último mensaje 19 Julio 2007, 20:48 pm
por vicmarcal
Como creo un botón que haga la función de imprimir?
Programación General
1adria1 1 1,904 Último mensaje 11 Febrero 2013, 16:30 pm
por 1adria1
Como creo un botón que haga la función de imprimir?
Java
1adria1 4 5,596 Último mensaje 11 Febrero 2013, 22:30 pm
por sapito169
Como implementar función Ajax - Autocomplete
PHP
Jarcx9 9 3,356 Último mensaje 30 Septiembre 2014, 17:04 pm
por Jarcx9
duda acerca de como implementar un función en este codigo.
Programación C/C++
tayzuke 1 1,733 Último mensaje 5 Julio 2016, 16:48 pm
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines