Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Sustituir una letra por una cadena (encriptacion propia)

Estas en el tema de Sustituir una letra por una cadena (encriptacion propia) en el foro de PHP en Foros del Web. Hola amigos, he estado trabajando en una especie de sistema de encriptación, necesito que por cada letra que se escriba se sustituya por una cadena, ...
  #1 (permalink)  
Antiguo 16/01/2014, 13:28
 
Fecha de Ingreso: junio-2013
Mensajes: 17
Antigüedad: 10 años, 10 meses
Puntos: 0
Sustituir una letra por una cadena (encriptacion propia)

Hola amigos, he estado trabajando en una especie de sistema de encriptación, necesito que por cada letra que se escriba se sustituya por una cadena, ejemplo intente hacer algo así:

Código PHP:
Ver original
  1. function encriptar($var)
  2. {
  3. $search  = array('E', 'D', 'C', 'B', 'A');
  4. $replace = array('A1B', 'E', 'D', 'C', 'B');
  5. $b = str_replace($search, $replace, $var);
  6. echo $b;
  7. }

el problema con la función anterior es que al sustituir por ejemplo encriptar("E");
esto debería retornar "A1B" pero esta retornando la cadena B1C es decir sustituye el valor de A y B por los del array A=B Y B=C tambien. lo que necesito es que solo sustituya la letra que ingrese osea (E = A1B) en la función (puede ser un parrafo también)...

gracias de antemano.

Última edición por DuranEnmanuel; 16/01/2014 a las 13:33
  #2 (permalink)  
Antiguo 16/01/2014, 13:52
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Sustituir una letra por una cadena (encriptacion propia)

Eres una víctima más de la trampa de str_replace. En el mismo manual oficial, explican sobre ello:

Cita:
Precaución: Trampa del orden de reemplazo

Debido a que str_replace() reemplaza de izquierda a derecha, podría sustituir a un valor previamente insertado al hacer sustituciones múltiples. Ver también los ejemplos de este documento.
Como los caracteres a buscar y de reemplazo están en arrays, se me ocurre buscar la letra ingresada en el array de búsqueda, obtengo la posición del elemento y con dicha posición, busco su reemplazo en el array de reemplazo, hago el reemplazo e imprimo. Para buscar la posición del elemento coincidente en el array, utilizaré la función array_search.

Código PHP:
Ver original
  1. function encriptar($var)
  2. {
  3.     $search  = array('E', 'D', 'C', 'B', 'A');
  4.     $replace = array('A1B', 'E', 'D', 'C', 'B');
  5.    
  6.     $pos = array_search($var, $search);
  7.     if ($pos !== FALSE)
  8.         $b = str_replace($search[$pos], $replace[$pos], $var);
  9.    
  10.     echo $b;
  11. }
  12.  
  13. encriptar('E');

Lo anterior producirá el siguiente resultado

Código HTML:
Ver original
  1. A1B

Así se ve en acción: http://ideone.com/oN9Szi

NOTA: Para hacer reemplazos de caracteres específicos en una palabra, tendrás que mejorar este algoritmo, porque así como está no te servirá.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 16/01/2014 a las 14:15
  #3 (permalink)  
Antiguo 16/01/2014, 14:37
 
Fecha de Ingreso: junio-2013
Mensajes: 17
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Sustituir una letra por una cadena (encriptacion propia)

Muchas gracias amigo, eso soluciona lo de la confusión de caracteres, pero que pasaría si le paso mas de un parametro a la función? algo como encriptar('EBC');

deberia retornar A1BCD; se me ocurre algo como un str_split() para separar letra por letra y encriptarlas para unirlas. podrías ayudarme?
  #4 (permalink)  
Antiguo 16/01/2014, 16:36
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 1 mes
Puntos: 270
Respuesta: Sustituir una letra por una cadena (encriptacion propia)

Código PHP:
Ver original
  1. $replace = array('E'=>'A1B','D'=> 'E','C'=> 'D','B'=> 'C','A'=> 'B');
  2.   echo implode("",
  3.         array_map(         
  4.                     function($i) use ($replace)
  5.                         { return isset($replace[$i])?$replace[$i]:$i; }
  6.                     ,
  7.                     str_split("EDC")
  8.                   )
  9.                 );

Etiquetas: cadena, encriptacion, letra, sustituir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:06.