【问题标题】:ASP.NET Membership Provider - Expose the saltASP.NET 成员资格提供程序 - 公开盐
【发布时间】:2012-07-24 20:02:11
【问题描述】:

背景

我们使用 ASPNET 成员资格提供程序来存储成员登录信息,同时使用 MongoDB 来存储辅助信息集。

由于 MongoDB 不提供内置加密,我们决定在将部分数据插入数据库之前使用 ASPNET 成员资格提供程序表中的成员 salt 对其进行加密。

目标

我将如何公开盐以便在代码中可以访问它?我在默认提供程序类中找不到任何方法。

另类

要么这样,要么有人可以提出更好的方法吗?将盐保存在不同的地方的好处之一是保护它免受“闯入者”的侵害。

谢谢, 最大。

【问题讨论】:

  • 如果您选择以散列格式存储用户密码,aspnet 会员提供程序会生成一个 salt 并将其保存在数据库中。我正在尝试使该盐在代码中可访问,以便我可以使用相同的盐来加密 mongodb 数据

标签: c# asp.net membership salt provider


【解决方案1】:

这是一种方法,您可以使用用户名,电子邮件到盐。

public static string hashCalculator(string username, string password)//Use username as salt.
        {
            byte[] stringbytes = System.Text.Encoding.Unicode.GetBytes(username.ToLower() + password);
            return Convert.ToBase64String(new SHA384Managed().ComputeHash(stringbytes));
        }

【讨论】:

  • 感谢您的快速响应。我不想计算新的盐,我想使用 aspnet 会员提供程序中的现有盐。在您的示例中,如果用户更改了他们的用户名或密码/电子邮件,我们将不得不重新加密他们的所有数据,否则就会丢失。
  • 没问题,如果他们改变使用上面的重新计算新的哈希并将其存储在数据库中,登录时只需比较哈希。
  • 这将涉及存储 salt 和我不想做的加盐数据,因为它会降低安全性,或者将其存储在复制数据的 aspnet 成员表中的新数据字段中。扩展其中一个 aspnet 成员类别并公开现有的 salt 不是更容易吗?
  • AFAIK,ASP.NET Sql Membership 提供程序将随机生成的盐存储在数据库中。所以,盐被储存了。此外,盐用于防止使用相同密码的人被入侵​​。你总是需要储存盐。
  • 这可能是一个不错的解决方案,但对于我想要实现的目标来说可能有点矫枉过正。在尝试扩展几个 aspnet 成员资格类以公开现有的 salt 失败后,我决定解决这个问题的最简单方法是,在我的自定义成员资格提供程序的重写“createuser”方法中,生成一个新的 salt 并将其保存为用户个人资料。感谢大家的帮助。如果有人读到这篇文章确实知道一种在代码中公开现有盐的方法,那么我仍然很想知道:)
猜你喜欢
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 2010-11-20
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多