相关疑难解决方法(0)

ASP.NET Identity的默认密码哈希 - 它是如何工作的并且是否安全?

我想知道在MVC 5和ASP.NET Identity Framework附带的UserManager中默认实现的Password Hasher是否足够安全?如果是这样,如果你可以向我解释它是如何工作的?

IPasswordHasher界面如下所示:

public interface IPasswordHasher
{
    string HashPassword(string password);
    PasswordVerificationResult VerifyHashedPassword(string hashedPassword, 
                                                       string providedPassword);
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它不需要盐,但在这个帖子中提到:" Asp.net身份密码哈希 ",它确实在幕后加盐.所以我想知道它是如何做到的?这盐来自何处?

我担心的是盐是静态的,使它非常不安全.

c# asp.net security passwords asp.net-identity

148
推荐指数
5
解决办法
11万
查看次数

如何设置ASP.NET标识的密码规则?

在我的ASP.NET应用程序中,我在web.config中的DefaultMembershipProvider和SqlMembershipProvider中有以下设置:

enablePasswordRetrieval="true"
passwordFormat="Clear" 
requiresQuestionAndAnswer="false" 
Run Code Online (Sandbox Code Playgroud)

它们是摘要式身份验证所必需的.我想转向ASP.NET身份.我正在使用自动化工具来更新我管理的所有web.config文件.

如何在Visual Studio 2013生成的项目中为ASP.NET Identity设置这些设置?

asp.net asp.net-membership sqlmembershipprovider visual-studio-2013 asp.net-identity

10
推荐指数
1
解决办法
1万
查看次数

ASP.NET标识 - 存储盐的位置在哪里?

我创建了一个简单的MVC4应用程序并注册了一个用户.usrname和密码存储在名为AspNetUsers的表中.该表没有盐场.

我理解的方式是当用户登录时; 他们输入用户名和密码.然后将盐与输入的密码连接起来,并与数据库中的密码进行比较.这不正确吗?即

Hash(PasswordEntered) + Salt = Password in database = authenticated
Hash(PasswordEntered) + Salt <> Password in database = not authenticated
Run Code Online (Sandbox Code Playgroud)

有一个名为:aspnetusers.SecurityStamp的字段,但我的研究告诉我,这不是Salt.

更新

我刚读过Scott Chamberlain.请参阅以下步骤:

1)用户在注册期间输入:Hello123作为密码,Salt(随机生成)为:456,然后输入PasswordHash的密码为:Hello123 + 456 2)然后用户尝试登录并输入Hello123(正确)作为密码.盐(随机生成)为:567.因此Hello123 + 456与Hello123 + 567进行比较,验证失败.

在这种情况下,用户输入正确的密码并且未经过身份验证.我显然缺少一些基本的东西.

c# asp.net

8
推荐指数
2
解决办法
2192
查看次数

将普通密码转换为EF Asp.Net Identity PasswordHash

我有一个项目,我们需要将许多用纯文本密码的用户迁移到一个新的数据库中,我们将对密码进行哈希处理.

新系统使用Entity Framework,需要使用Asp.Net Identity框架进行身份验证.

我发现我可以在C#中生成一个正确的哈希密码,Entity Framework可以毫无问题地读取该密码.

    public static string HashPassword(string password)
    {
        byte[] salt;
        byte[] buffer2;
        using (var bytes = new Rfc2898DeriveBytes(password, 0x10, 0x3e8))
        {
            salt = bytes.Salt;
            buffer2 = bytes.GetBytes(0x20);
        }
        byte[] dst = new byte[0x31];
        Buffer.BlockCopy(salt, 0, dst, 1, 0x10);
        Buffer.BlockCopy(buffer2, 0, dst, 0x11, 0x20);
        return Convert.ToBase64String(dst);
    }
Run Code Online (Sandbox Code Playgroud)

SQL中是否有类似的东西我可以在INSERT语句中使用SELECT到另一个表?

sql entity-framework sql-server-2012 asp.net-identity

6
推荐指数
1
解决办法
2233
查看次数

ASP.NET Identity 2是否使用machinekey来散列密码?

我在ASP.NET MVC 5中创建了一个应用程序.现在我需要在服务器上部署应用程序.部署时,我现有的密码是否可以在ASP.NET Identity 2中使用?或者我是否需要使用与客户端计算机相同的机器密钥?

asp.net asp.net-mvc asp.net-mvc-5 asp.net-identity

2
推荐指数
1
解决办法
3783
查看次数

MVC 5.2.2.0 中使用的 UserManager.CreateAsync 默认哈希

执行时密码是否经过哈希处理?UserManager.CreateAsync(user, model.Password);。如果是这样,MVC 5 版本 5.2.2.0 项目中的哈希默认情况下是如何完成的?还是SHA1+salt+base64吗?类似的东西?:

internal string EncodePassword(string pass,  string salt)
{
   byte[] bytes = Encoding.Unicode.GetBytes(pass);
   byte[] src = Convert.FromBase64String(salt);
   byte[] dst = new byte[src.Length + bytes.Length];
   byte[] inArray = null;
   Buffer.BlockCopy(src, 0, dst, 0, src.Length);
   Buffer.BlockCopy(bytes, 0, dst, src.Length, bytes.Length);

   HashAlgorithm algorithm = HashAlgorithm.Create("SHA1");
   inArray = algorithm.ComputeHash(dst);

   return Convert.ToBase64String(inArray);
}
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc hash asp.net-mvc-5

2
推荐指数
1
解决办法
3508
查看次数