2010-01-05 39 views

Respuesta

20

La manera más popular de hacer esto es utilizando un algoritmo de hash. Hay una excelente blog post here acerca de cómo usar el algoritmo MD5 para hash una cadena, pero hay muchos otros ejemplos en el espacio de nombres System.Cryptography.

En cuanto a # 2, la guía general paso a paso para cómo funcionaría sería el siguiente:

En el registro:

  1. hash de la contraseña de un usuario mediante el algoritmo especificado y almacenarla en la base de datos
  2. Salt este hash (opcional, pero preferido)

El usuario/usuario & contraseña de verificación:

  1. Busque en la base de datos para el nombre de usuario
  2. Si existe, recuperar la contraseña con algoritmo hash
  3. Hash y la sal de la contraseña introducida y compararlo con el recuperado contraseña

Todo es relativamente largo, pero es muy seguro.

Hay otra guía muy detallada sobre hashing y salazón here.

+0

Otros detalles: Hay unas cuantas versiones del proceso de inicio de sesión y registro se describe en la siguiente pregunta SO: http://stackoverflow.com/questions/1471654/reversing-an-md5-hash/1471668#1471668 –

+0

La sal es una entrada adicional al proceso de hash normalmente, pero por lo demás una buena y clara explicación . +1 –

+0

por favor, ayúdenme en esta pregunta http://stackoverflow.com/questions/2863034/sql-serverwhat-data-type-to-use-for-password-salt-and-hash-values-and-what- leng –

0

para hash que tienen varios algoritmos soportados en System.Security.Cryptography, para su caso de uso es probable que desee elegir un hash basado SHA o algo similar.

En cuanto a la comparación: No se compara el valor de DB y el que el usuario le dio. En primer lugar, usa la misma función de cifrado/hash que usó para almacenar la contraseña en el DB, esta vez con la entrada del usuario. Si el resultado es igual al hash en el DB, la contraseña fue (probablemente) correcta.

La intención es que nadie que tenga acceso al DB pueda recuperar las contraseñas en texto libre y ni siquiera su programa necesita saber al respecto (solo la parte que acepta la entrada del usuario lo tendrá por un corto tiempo) .

Enlaces (tal vez incluso duplicados):

0

En sentido estricto, debe salt the password continuación, desmenuzar, para evitar un ataque de diccionario. Puede utilizar cualquiera de las implementaciones de la clase abstracta HashAlgorithm en el espacio de nombres System.Cryptography para calcular el hash: la mejor opción actual sería probablemente una de las SHA-2 algorithms.

Usted almacena el hash no la contraseña, y compara los valores de hash para autenticar al usuario.

+0

@ David ningún ejemplo –

0

Al igual que los otros han dicho, hay muchas opciones.

Aquí algunos ejemplos de código (usando MD5 en lugar de SHA) de Microsoft que podrían ayudar a conseguir a empezar

using System; 
    using System.Security.Cryptography; 
    using System.Text; 

    string sSourceData; 
    byte[] tmpSource; 
    byte[] tmpHash; 

    sSourceData = "MySourceData"; 
    //Create a byte array from source data. 
    tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData); 

    //Compute hash based on source data. 
    tmpHash = new MD5CryptoServiceProvider().ComputeHash(tmpSource); 
5

de hash simple:

public string GetSHA256Hash(string s) 
     { 
      if (string.IsNullOrEmpty(s)) 
      { 
       throw new ArgumentException("An empty string value cannot be hashed."); 
      } 

      Byte[] data = System.Text.Encoding.UTF8.GetBytes(s); 
      Byte[] hash = new SHA256CryptoServiceProvider().ComputeHash(data); 
      return Convert.ToBase64String(hash); 
     } 
Cuestiones relacionadas