openssl_encrypt encrypt decrypt php encryption salt mcrypt

encrypt - php mcrypt install



Cripta PHP y sal-más aclaración por favor (2)

Parece que la crypt() no le gusta + char en la sal, y muchos otros caracteres especiales también ( * , % , etc.). Si los filtra, debería funcionar en cada intento (y no es necesario repetir la cadena de identificación de sal).

Estuve aquí ayer y obtuve algunas excelentes respuestas. Tomé lo que conseguí y armé, lo que creo será un algoritmo bastante seguro. Tengo un problema al usar blowfish con un ciclo for que genera la sal.

Estoy usando caracteres base64 y un ciclo for para obtener una cadena aleatoria. Quiero tomar esta cadena generada e insertarla en la función crypt como la sal.

Debido a que la documentación sobre blowfish es tan escasa y los documentos de PHP ni siquiera lo mencionan, estoy apuñalando en la oscuridad aquí.

Lo realmente extraño es que si ejecutas este código como está ahora, no fallará. Elimine el ''$ 2a $ 07 $'' de arriba del bucle for o de la función crypt y devolverá intermitentemente una cadena encriptada. Mi comprensión de blowfish es que la cadena cifrada debe comenzar con ''$ 2a $ 07 $'' y terminar en ''$'', de ahí la concatenación en la función crypt. Realmente no necesito la cadena inicial sobre el ciclo for y solo quería obtener Deshazte de eso.

También me gustaría aclarar las mejores prácticas para almacenar la sal aleatoria, ya sea en la base de datos o almacenando la salida de la función cripta en la base de datos.

Ayer, no hubo un código real, solo discusión. Me gustaría poner algunos códigos juntos hoy y tener algo que sea bastante seguro en su lugar. Si alguien puede encontrar un algoritmo mejor, siempre estoy abierto.

$base64 = ''ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/''; $salt = ''$2a$07$''; for($i=0; $i<60; $i++) { $salt .= $base64[rand(0,63)]; } return crypt(''password'', ''$2a$07$''.$salt.''$'');


Sé que esta pregunta es prácticamente historia antigua ahora, pero para el beneficio de cualquiera que la encuentre buscando en google, hay una descripción bastante detallada de cómo funcionan las sales bcrypt / EksBlowfish en la respuesta a esta pregunta:

¿Por qué crypt / blowfish genera el mismo hash con dos sales diferentes?

La respuesta corta es que, como dijo caf, usa un alfabeto base64 compuesto por [a-zA-Z0-9./] , con $ como el carácter de terminación / relleno nulo (NO 0). Si usa caracteres fuera de ese rango, o un $ demasiado temprano, se producirá un error o no se interpretará la totalidad de la sal.