【问题标题】:ASP.NET Identity - Verify Password Without FrameworkASP.NET 身份 - 在没有框架的情况下验证密码
【发布时间】:2016-02-19 21:31:19
【问题描述】:

背景

我正在使用

Microsoft.AspNet.Identity;

MVC 网站中的框架。我在网站中实现了所有标准功能,例如密码检索、电子邮件确认等。

我的问题

我想在 Xamarin c# 中创建一个非常基本的应用程序,但我希望它使用我在我的网站上设置的数据库,当然包括验证密码。

按照我的想法应该是这样的:

  1. 用户在手机上输入登录详细信息。
  2. 手机对密码进行哈希处理并使用以哈希字符串作为输入的 WCF 服务
  3. 返回布尔值。取决于哈希验证。

我不能用

Microsoft.AspNet.Identity;

在我的 Xamarin 应用程序上。

问题

如何重新创建 Asp.Identity 使用的哈希,以便验证密码?

如果情况是我必须使用原始密码使用 WCF(这安全吗?)并对服务本身进行散列 - 我可以使用身份框架吗?如果没有,那么我仍然有创建/验证哈希的问题。

另外,如果我对这些散列函数的理解有些偏离,请随时教育我:)

额外信息

我尝试过的散列函数提供了与身份框架完全不同的散列 - 在我的测试中,我发现创建具有完全相同密码的用户会提供不同的散列。 (由于使用了盐?)

【问题讨论】:

    标签: c# asp.net-mvc hash asp.net-identity md5


    【解决方案1】:

    好的,我找到了解决方案

    为有类似问题的人发帖

    参考this 回复zespri顺便点赞

    我决定使用原始密码和用户名使用 WCF,并简单地使用该函数来验证上述答案是否提供。

    编辑

    只是为了澄清我用来验证密码的是这段代码(取自上面的链接):

    public static bool VerifyHashedPassword(string hashedPassword, string password)
    {
    byte[] buffer4;
    if (hashedPassword == null)
    {
        return false;
    }
    if (password == null)
    {
        throw new ArgumentNullException("password");
    }
    byte[] src = Convert.FromBase64String(hashedPassword);
    if ((src.Length != 0x31) || (src[0] != 0))
    {
        return false;
    }
    byte[] dst = new byte[0x10];
    Buffer.BlockCopy(src, 1, dst, 0, 0x10);
    byte[] buffer3 = new byte[0x20];
    Buffer.BlockCopy(src, 0x11, buffer3, 0, 0x20);
    using (Rfc2898DeriveBytes bytes = new Rfc2898DeriveBytes(password, dst, 0x3e8))
    {
        buffer4 = bytes.GetBytes(0x20);
    }
    return ByteArraysEqual(buffer3, buffer4);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      相关资源
      最近更新 更多