2010-05-19 15 views
14

estoy generando sal y valores hash de mis contraseñas mediante el uso,[Servidor Sql] ¿qué tipo de datos usar para los valores de sal y hash de la contraseña y qué longitud?

string salt = CreateSalt(TxtPassword.Text.Length); 
string hash = CreatePasswordHash(TxtPassword.Text, salt); 

private static string CreateSalt(int size) 
{ 
    //Generate a cryptographic random number. 
    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); 
    byte[] buff = new byte[size]; 
    rng.GetBytes(buff); 

    // Return a Base64 string representation of the random number. 
    return Convert.ToBase64String(buff); 
} 

private static string CreatePasswordHash(string pwd, string salt) 
{ 
    string saltAndPwd = String.Concat(pwd, salt); 
    string hashedPwd = 
    FormsAuthentication.HashPasswordForStoringInConfigFile(
    saltAndPwd, "sha1"); 

    return hashedPwd; 
} 

Qué tipo de datos que sugiere para almacenar estos valores en SQL Server? Cualquier sugerencia ...

Sal: 9GsPWpFD

Hash: E778AF0DC5F2953A00B35B35D80F6262CDBB8567

+0

+ buena pregunta. –

Respuesta

7

ASPNET_DB dice que esto - no puede ir mal.

Password nvarchar(128) NOT NULL, 
PasswordSalt nvarchar(128) NOT NULL, 

mientras que 128 puede parecer mucho, varios tipos de cifrado puede dar lugar a cadenas más grandes de lo que comenzó con. No hay absolutamente ninguna razón para no seguir el ejemplo de las personas muy inteligentes que han gastado miles de horas hombre desarrollando el sistema de membresía asp.net.

+10

-1/lo siento, pero "microsoft es inteligente, yo estúpido, yo sigo a massa" es una mala actitud. Especialmente dada la tremenda cantidad de estupidez que sale de Microsoft a veces. Trae argumentos – TomTom

+5

@tomtom - wow. Supongo que tiene mucha experiencia en la implementación de stacks de seguridad y ha estado en cada línea de código fuente y columna y procedimiento almacenado que compone el muy sólido y flexible stack de proveedores de asp.net para respaldar su juicio sumario de mi declaración. hmmm ... Conozco a alguien que se ajusta a esa descripción ..... –

+3

Bueno, lo hice. Pero también trato de usar mi cerebro y no seguir ciegamente cosas que otras personas pudieron haber hecho, por razones totalmente diferentes que ni siquiera te importa dar. Por cierto, creo seriamente que incluso MS gastaría miles (¡!) De horas de trabajo en el sistema de membresía asp.net cuando otras personas toman 100 o más en total. ¿Y sabes que el sistema de membresía fue "añadido" en una versión posterior de .net después de que las personas inteligentes pasaron por alto totalmente haciéndolo extensible de alguna manera? MS no es perfecto. – TomTom

1

Almacenamos nuestras contraseñas como un hash SHA512 binario

+2

Sin usar sal, esto es una estupidez y una gran negligencia, ya que significa que un simple ataque de diccionario puede hackear contraseñas, y mientras más rápido, más contraseñas tiene tu lista. – TomTom

+6

Puede hacer lo mismo con una sal –

+0

@JoePhilllips Creo que los ataques a la mesa arcoiris, que se evitan cuando se usa sal. – ghord

Cuestiones relacionadas