w3schools password openssl_decrypt encrypt desencriptar data php encryption crypt

php - password - ¿Por qué no debería usar el 23er personaje en la sal de la función crypt()?



php aes (2)

Estoy aprendiendo acerca de la función crypt () de PHP y he estado realizando algunas pruebas con ella. De acuerdo con este post , debería usar una sal de 22 caracteres de largo. Sin embargo, puedo usar una cadena de 23 caracteres de largo con algunas limitaciones. Cuando uso una cadena de 22 caracteres siempre obtengo el resultado de ''$ 2y $ xxStringStringStringStri.HashHashHashHashHashHashHashHas''. Sé que el período es solo parte de la sal.

Parece que si uso 23 caracteres en lugar de solo 22, puedo generar con éxito hashes diferentes, pero solo hay 4 resultados diferentes para los 64 caracteres. El 23er carácter "redondea hacia abajo" al 1/4 más cercano del alfabeto de 64 caracteres (por ejemplo, el 23er carácter es "W" y se redondea a "O" o cualquier número a "u")

v---------------v---------------v---------------v--------------- ./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890

Las cuatro funciones de estas criptas generan la misma sal:

crypt(''Test123'',''$2y$09$AAAAAAAAAAAAAAAAAAAAAq''); crypt(''Test123'',''$2y$09$AAAAAAAAAAAAAAAAAAAAAr''); crypt(''Test123'',''$2y$09$AAAAAAAAAAAAAAAAAAAAAs''); crypt(''Test123'',''$2y$09$AAAAAAAAAAAAAAAAAAAAAt'');

Pero este es diferente:

crypt(''Test123'',''$2y$09$AAAAAAAAAAAAAAAAAAAAAu'');

Entonces, ¿por qué no debería usar el personaje número 23 cuando puede generar resultados diferentes con éxito? ¿Hay algún tipo de comportamiento erróneo en PHP que debería evitarse al no usarlo?

Para aclarar cómo estoy contando el 23er personaje de la sal:

crypt(''Test123'',''$2y$08$ABCDEFGHIJKLMNOPQRSTUV''); // The salt is ''$ABCDEFGHIJKLMNOPQRSTUV'' // Which will be treated as ''$ABCDEFGHIJKLMNOPQRSTUO''


$ no es parte de la sal real. Es un separador

Para la cripta Blowfish, el formato es $ 2 [axy] $ log2Rounds $ [salt] [hash]. Usted lo describe agregando a. - Eso es porque te estás perdiendo el último personaje. La sal de Blowfish es de 128 bits. Podría usar solo 126, sí, pero está debilitando innecesariamente la sal.


Tiene que ver con colisiones hash. Una vez que exceda los 22 caracteres, sus hashes generados ya no serán únicos dependiendo del NAMESPACE del algoritmo. Para decirlo de otra manera, más de 22 caracteres no resultan en una mayor seguridad y en realidad pueden disminuir su nivel de seguridad.