Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security MVC 3 Crypto Helper——这会增加额外的屏蔽以使密码更安全吗?_Security_Asp.net Mvc 3_Cryptography_Html Helper - Fatal编程技术网

Security MVC 3 Crypto Helper——这会增加额外的屏蔽以使密码更安全吗?

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

A

B

我可以知道方法A和方法B吗,哪一种更安全?或者哪种方法是正确的?使用reflector,我发现这是核心中的哈希密码方法:

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