A la hora de crear un hash para una contraseña, es conveniente no incluir sólo la contraseña, sino concatenar una cadena o un número más; lo mismo cuando generamos claves para que interaccionen aplicaciones en varios servidores; aunque hay veces en que, dados los pocos datos de que disponemos a la hora de generar la clave, no tenemos mucho donde elegir a la hora de crear el hash.
Por ese motivo se me ocurrió esta función en PHP, lo que hace es intercalar cadenas, es decir, tenemos dos cadenas, y queremos generar una cadena a partir de las dos anteriores, podemos coger un carácter de una, otro de otra, y así sucesivamente (como si estuviéramos barajando) hasta formar una cadena cuya longitud es la suma de las dos. Por ejemplo si tenemos las palabras «poesia» y «binaria«, resultaría la cadena: pboiensairaia .
Aunque, ya que vamos a hacer algo así, ¿ por qué limitarlo ? Hagamos una función que soporte una cantidad indeterminada de cadenas:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | function intercalar($cadenas) { $n_cadenas = count ($cadenas); if ($n_cadenas==1) /* Si sólo hay una cadena, la devolvemos */ return $cadenas[0]; /* Contamos los caracteres de cada cadena y los almacenamos en un array */ $chars_cadena=array(); for ($i=0; $i<$n_cadenas; $i++) $chars_cadena[$i]=strlen($cadenas[$i]); $max_cadena = max ($chars_cadena); /* La cadena más larga determina cuándo paramos */ $res=''; /* Recorremos la longitud de cadena más larga */ for ($j=0; $j<$max_cadena; $j++) { /* Recorremos todas las cadenas */ for ($i=0; $i<$n_cadenas; $i++) { /* Si la cadena no está terminada añadiremos el carácter a la cadena */ if ($j<$chars_cadena[$i]) $res.=$cadenas[$i][$j]; } } return $res; } echo intercalar (array("Poesia", "Binaria", "Blog", "Gaspar", "Programacion", "Software", "Libre")); |
La cadena resultante de este ejemplo será: PBBGPSLoilaroienosofbsagpgtrirarweairaaamraecion.
Pingback: Bitacoras.com /
Pingback: BlogESfera.com /