2009-02-24 8 views
10

Necesito saltear y trocear algunas contraseñas para que pueda almacenarlas de forma segura en una base de datos. ¿Tiene algún consejo o idea sobre la mejor manera de hacerlo utilizando Linq to SQL?Contraseñas de salteo y hashing usando Linq To SQL

+0

uso esto: http://encrypto.codeplex.com/ – Omu

Respuesta

25

LINQ to SQL no tiene mucha relevancia en este caso. Puede usar cualquier mecanismo que desee, porque no hará hashing y salar en SQL.

Los pasos para guardar una contraseña iría a lo largo de estas líneas:

  1. reciben la contraseña como texto plano, junto con la identificación del usuario.
  2. Generar (y recordar) la sal.
  3. Combina la sal con el texto de la contraseña, p. anteponerlo o anexarlo.
  4. Hash el texto resultante con su función de hash
  5. Almacene el ID de usuario, el hash y la sal en su DB.

Los pasos para verificar una contraseña iría a lo largo de estas líneas:

  1. reciben la contraseña como texto plano, junto con la identificación del usuario.
  2. Recupere el hash y la sal de la base de datos para la ID de usuario proporcionada.
  3. Combine la sal con el texto de la contraseña proporcionada.
  4. Hash el texto resultante con su función hash.
  5. Compara el hash de la función con el hash recuperado de la base de datos.
  6. Si son iguales, la contraseña proporcionada fue correcta.
+0

¿Es común para generar y almacenar sal para cada contraseña, en lugar de tener una sal común para combinar con cada contraseña recibida? De acuerdo, parece "más seguro", pero dado que la sal simplemente está almacenada en la base de datos de todos modos ... Solo me pregunto. – JMD

+0

Sí, definitivamente sales por usuario: considere un atacante con la base de datos de contraseñas codificadas. Con la sal por usuario cada contraseña adivinada que los hashes solo pueden compararse con una entrada, con una sal, puede compararla con todas las contraseñas hash. –

+0

rainbow tablas FTW, cuanta más sal mejor – ShuggyCoUk

1

Básicamente como @Vojislav dice.

Es posible que desee mirar bcrypt para el hash, tiene fama de ser muy bueno.

0

Si es para la cuenta de usuario de inicio de sesión que no quiere simplemente sal + hash de la clave, también desea utilizar el estiramiento de la clave según PBKDF2 en el documento RFC2898.

Aquí es API para hacer lo que necesita con ejemplo de uso: https://sourceforge.net/projects/pwdtknet

también crea sal al azar cripto en la longitud especificada