Editar: Esto no es relevante para esta pregunta en particular , pero sí un consejo sobre el tema en general.
Parece que lo que realmente quieres es un mecanismo de autenticación adecuado. No debe intentar tirar su propio , ya que se considera una mala práctica. Un mecanismo de autenticación seguro y confiable es la autenticación de acceso de resumen HTTP, que está profundamente anclada en el marco HTTP. Es un protocolo de respuesta de desafío, lo que significa que algo así sucede cuando un usuario intenta navegar al mecanismo de "subir archivos":
- El usuario navega a enlace
- El servidor advierte que el directorio / protected / o el archivo upload.html están protegidos por Autenticación Digestiva y responden con un código de error 401 Autorización requerida . Es un desafío para el agente de usuario (el navegador web) para responder. La respuesta se calcula utilizando el desafío, las credenciales del usuario (nombre de usuario y contraseña) junto con otra información.
-
El usuario ingresa la contraseña, lo que lleva al agente de usuario que proporciona al servidor un encabezado Autorización , que contiene la respuesta al desafío
-
El servidor, utilizando las credenciales que ha almacenado en el usuario, calcula el mismo valor de respuesta utilizando los mismos datos que envió al usuario.
-
El servidor compara el valor de respuesta recibido y el generado localmente, y si son iguales, conceda acceso al realm
protegido.
Todo esto se hace usando el hash MD5 como estándar. La aplicación y los servidores pueden configurarse para usar MD5, SHA-X o cualquier algoritmo de hash, incluso hash iterado, siempre que se siga el mismo procedimiento en cada lado de la comunicación.
MD5 se considera roto , en el sentido de que es bastante fácil encontrar colisiones . Esto no es un problema para este proceso de autenticación, ya que requiere una forma de ataque de preimagen para recolectar la contraseña con éxito. Esto solo es posible en teoría con una complejidad computacional de 2 123.4 .
Si se siente intimidado por esto, o si el esquema no se ajusta a lo que realmente necesita, al menos almacene su contraseña de forma salted y hash, es decir, la base de datos contiene:
nombre de usuario | hash_function (contraseña + ":" + sal) | sal
Aquí, SHA-256 debería estar bien.
Por favor, solicite más detalles sobre HTTP Digest Auth. si está interesado.
Además, considere agregar su tipo de aplicación de servidor (Apache?) A la pregunta.