2009-12-01 15 views
10

En mi aplicación web ASP.NET estoy procesando mis contraseñas de usuario con SHA512.Almacenar un hash de contraseña SHA512 en la base de datos

A pesar de tanto SOing y Google no estoy seguro de cómo debería almacenarlos en la base de datos (SQL2005) - el siguiente código muestra los conceptos básicos de cómo estoy creando el hash como una cadena y actualmente estoy insertándolo en la base de datos en una columna Char (88) ya que parece ser la longitud creada consistentemente

Lo mantiene como una Cadena la mejor manera de hacerlo, si es así siempre será de 88 caracteres en un SHA512 (como he visto algunas cosas extrañas en Google)?

Dim byteInput As Byte() = Encoding.UTF8.GetBytes(sSalt & sInput) 
Dim hash As HashAlgorithm = New SHA512Managed() 
Dim sInsertToDatabase As String = Convert.ToBase64String(hash.ComputeHash(byteInput)) 
+0

Eche un vistazo a [link text] (http://altairiswebsecurity.codeplex.com)/si desea utilizar la membresía asp.net. Tiene una estructura de tabla muy abierta, por lo que podría ser más fácil de integrar con su base de datos actual. – jhexp

Respuesta

15

SHA512 produce 512 bits, o 64 bytes. Puede almacenar esos 64 bytes en una columna binaria, si así lo desea.

Si desea manejar el hash fuera de su aplicación, es más cómodo almacenar una cadena Base64, como lo está haciendo ahora. Base64 agrega aproximadamente un 33% de sobrecarga constante, por lo que puede esperar que la cadena tenga siempre 88 caracteres.

Dicho esto, ASP.NET tiene un built-in fairly comprehensive authentication system, que debe usar.

+0

Una matriz de bytes en .NET se asigna directamente a BINARY (o VARBINARY) en T-SQL – RickNZ

+0

Gracias @RickNZ - muy apreciado. – Chris

+1

Gracias a @Vinko por todas las aclaraciones. Me gusta tener el modelo de seguridad y comprender exactamente qué es lo que está pasando y sé que puedo trasladar la usabilidad de las contraseñas fuera de ASP.NET en cualquier momento. He sido mordido allí. antes de. Tal vez equivocado, ciertamente no es que sea un fanático del control o algo así;) – Chris

Cuestiones relacionadas