2010-05-19 51 views
14

我通过使用产生从我的密码盐和哈希值,[Sql-Server]用于密码salt和hash值的数据类型以及长度是多少?

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; 
} 

你会建议在SQL Server中存储这些值的数据类型是什么?任何建议...

盐:9GsPWpFD

哈希:E778AF0DC5F2953A00B35B35D80F6262CDBB8567

+0

+很好的问题。 – 2010-05-19 06:03:50

回答

7

ASPNET_DB说,这 - 错不了。

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

,而128可以看起来很多,不同类型的加密可能会导致更大的字符串比你开始了。绝对没有理由不跟随那些花费数千人工时开发asp.net会员系统的非常聪明的人的领导。

+10

-1 /对不起,但“微软聪明,我愚蠢,我遵循马萨”是一种不好的态度。 Especialyl给予了微软有时从微软大量的愚蠢行为。带来争论。 – TomTom 2010-05-19 05:46:02

+5

@tomtom - 哇。我想你在实现安全性堆栈方面有很多经验,并且已经完成了源代码,列和存储过程的每一行,构成了非常健壮和灵活的asp.net提供程序堆栈,以备份对语句的简要判断。嗯......我知道有人适合这种描述..... – 2010-05-19 05:52:41

+3

嗯,我做到了。但我也尝试用我的大脑,而不是盲从其他人可能做的事 - 出于完全不同的理由,你甚至不关心给予。顺便说一句,我甚至怀疑,即使MS会花费数千(!)个工时来开发asp.net会员系统,而其他人完全可以使用mabe 100。而且,在智能人士完全忽略了使其以任何方式扩展之后,你知道会员制在后来的.net版本中被“固定”了吗? MS并不完美。 – TomTom 2010-05-19 06:01:35

1

我们将密码存储为二进制SHA512哈希

+2

不使用盐这是愚蠢的和严重的疏忽,因为它意味着一个简单的字典攻击可以破解密码 - 并且这样做越快,您的列表的密码越多。 – TomTom 2010-05-19 06:02:56

+6

你也可以用盐做同样的工作 – 2010-05-19 13:37:56

+0

@JoePhilllips我认为他会改变彩虹桌的攻击方式,在使用盐的时候避免这种攻击。 – ghord 2014-09-30 14:39:13

相关问题