Pregunta

Estoy trabajando con Subversion basado en Windows y me gustaría escribir una utilidad sencilla en .NET para trabajar con el archivo de contraseñas de Apache.Entiendo que utiliza una función denominada MD5Crypt, pero parece que no puedo encontrar una descripción del algoritmo más allá de que en algún momento usa MD5 para crear un hash.

¿Alguien puede describir el algoritmo MD5Crypt y el formato de línea de contraseña?

¿Fue útil?

Solución

Una descripción textual precisa del algoritmo de cripta actualizado para su uso con sha256 y sha512 se encuentra en http://www.akkadia.org/drepper/SHA-crypt.txt

Incluye contrastes con el algoritmo MD5, por lo que debería darte lo que estás buscando.

Otros consejos

Puede encontrar una implementación de md5crypt en el paquete tcllib. La descarga está disponible en fuenteforja.

También puede encontrar un ejemplo de un md5crypt compatible con Apache en el código fuente para el controlador genérico CAS

MD5Crypt es básicamente un reemplazo de la antigua función de cripta de Unix.Fue introducido en freebsd y también ha sido adoptado por otros grupos.

La idea básica es esta:

  • un hash es una buena manera de almacenar una contraseña
    • tomas la contraseña ingresada por el usuario y la aplicas hash
    • compararlo con el hash almacenado
    • si el hash es el mismo, las contraseñas coinciden

Pero hay un problema:

  • Supongamos que usted elige la contraseña "jeff" y yo también elijo la contraseña "jeff".
  • Ahora nuestros dos hash de contraseña son iguales.
  • Entonces, si veo los códigos hash almacenados, sabré que su contraseña es la misma que la mía, "jeff".

Entonces, podemos agregar una cadena "sal" a la contraseña.

  • Esto puede ser cualquier cosa al azar.
  • Supongamos que para su cuenta es "zuzu" y para mi cuenta es "rjrj".
  • Ahora aplicamos un hash a la cadena "jeffzuzu" para su contraseña y "jeffrjrj" para mi contraseña.
  • Ahora tenemos diferentes valores hash para nuestra contraseña.
  • Podemos almacenar de forma segura el valor de sal con la contraseña hash, ya que incluso conocer el valor de sal no ayudará a decodificar el hash.

Mencionas .net, hay un indicador en otro foro sobre esto:

System.Security.Cryptography.MD5CryptoServiceProvider md5 = new
System.Security.Cryptography.MD5CryptoServiceProvider();

string hash =BitConverter.ToString((md5.ComputeHash(
System.Text.ASCIIEncoding.Default.GetBytes(stringtohash) ) ));

¡HH!

El proceso es bastante complicado...la sal y la contraseña se combinan no una, sino 1000 veces.Además, la codificación base64 utiliza un alfabeto diferente y el relleno se elimina al final.

Probablemente lo mejor sería encontrar una biblioteca para usar, como glibc en cygwin.

Dado que de todos modos codificas contra Apache, echa un vistazo a implementación de apache de cripta-md5.

El algoritmo original (creo) en C se puede encontrar aquí.Se diferencia de la implementación anterior sólo por el número mágico diferente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top