Security MVC 3 Crypto Helper——这会增加额外的屏蔽以使密码更安全吗?
A B 我可以知道方法A和方法B吗,哪一种更安全?或者哪种方法是正确的?使用reflector,我发现这是核心中的哈希密码方法:Security MVC 3 Crypto Helper——这会增加额外的屏蔽以使密码更安全吗?,security,asp.net-mvc-3,cryptography,html-helper,Security,Asp.net Mvc 3,Cryptography,Html Helper,A B 我可以知道方法A和方法B吗,哪一种更安全?或者哪种方法是正确的?使用reflector,我发现这是核心中的哈希密码方法: string hashedPwd = Crypto.HashPassword(originalPassword); 由于使用salt的主要目的是击败rainbow表,向HashPassword已经做的事情添加额外的salt似乎不会给您带来太多好处,而且只会带来额外的开销(因为您必须存储自己生成的salt。HashPassword将其构建到返回值中)。以下是HashP
string hashedPwd = Crypto.HashPassword(originalPassword);
由于使用salt的主要目的是击败rainbow表,向
HashPassword
已经做的事情添加额外的salt似乎不会给您带来太多好处,而且只会带来额外的开销(因为您必须存储自己生成的salt。HashPassword
将其构建到返回值中)。以下是HashPassword
的作用,仅供参考:
密码散列由RFC2898算法使用128位salt、256位子密钥和1000次迭代生成。生成的hash bytestream的格式为{0x00,salt,subkey},在返回之前对其进行base-64编码
因此,简而言之,框架中的内容对于任何合理的“足够好”定义来说已经足够好了。那么,如果我使用哈希密码方法,是否意味着我不需要存储salt,并且当我回调crypto.hashpassword行时,它将生成相同的值?(我的意思是,当用户登录时,为了获取相同的值比较…如果您查看MSDN i发布的部分,它将盐存储在返回值中。因此,您需要存储的是从
HashPassword
返回的内容,其余的内容将在您调用Crypto.VerifyHashedPassword
时执行。最后,自我实现后,我了解tood…verifyhashedpassword用于检测它是否是原始密码,我不需要存储salt=D,只需保留哈希密码..在登录形式中,只需使用verifyhashedpassword(数据库中的哈希密码,用户登录输入),如果为真,则为密码=D
string hashedPwd = Crypto.HashPassword(originalPassword);
public static string HashPassword(string password)
{
if (password == null)
{
throw new ArgumentNullException("password");
}
return HashWithSalt(password, GenerateSaltInternal(0x10));
}