C# ASP.NET成员资格提供程序-公开salt 背景

C# ASP.NET成员资格提供程序-公开salt 背景,c#,asp.net,membership,salt,provider,C#,Asp.net,Membership,Salt,Provider,我们使用存储成员登录信息的ASPNET成员资格提供程序,以及MongoDB来存储第二组信息 由于MongoDB不提供内置加密,因此我们决定在使用ASPNET成员资格提供程序表中的成员salt将部分数据插入数据库之前对其进行加密 客观的 如何公开salt,以便在代码中访问它?在默认的提供程序类中找不到任何方法 可供替代的 或者有人能提出更好的方法吗?将盐保存在不同的地方的好处之一是保护它不受“入侵者”的侵害 谢谢, 最大值。这里有一种方法,您可以使用用户名、电子邮件发送给salt public s

我们使用存储成员登录信息的ASPNET成员资格提供程序,以及MongoDB来存储第二组信息

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

客观的 如何公开salt,以便在代码中访问它?在默认的提供程序类中找不到任何方法

可供替代的 或者有人能提出更好的方法吗?将盐保存在不同的地方的好处之一是保护它不受“入侵者”的侵害

谢谢,
最大值。

这里有一种方法,您可以使用用户名、电子邮件发送给salt

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

谢谢你的快速回复。我不想计算新的salt,我想使用aspnet成员资格提供程序中现有的salt。在您的示例中,如果用户更改其用户名或密码/电子邮件,我们将不得不重新加密其所有数据,否则数据将丢失。如果用户更改,则可以使用上述方法重新计算新哈希并将其存储在数据库中,在登录时,只需比较散列。这将涉及存储salt和salt数据,我不想这样做,因为这会降低安全性,或者将其存储在aspnet成员资格表中的一个新数据字段中,以复制数据。扩展一个aspnet成员类并公开现有的salt不是更容易吗?AFAIK,ASP.NET Sql成员资格提供程序在数据库中存储随机生成的salt。所以,盐是储存的。此外,salt还用于防止使用相同密码的人闯入。你总是需要储存盐。这可能是一个很好的解决方案,但对于我正在努力实现的目标来说,可能有点过头了。在尝试扩展几个aspnet成员类以公开现有salt失败后,我决定解决此问题的最简单方法是,在自定义成员资格提供程序的重写“createuser”方法中,生成一个新salt并将其保存为用户配置文件的一部分。谢谢大家的帮助。如果阅读本文的任何人都知道如何在代码中公开现有的salt,那么我仍然很想知道:)如果您选择以哈希格式存储用户密码,aspnet成员资格提供程序将生成一个salt并将其保存在数据库中。我试图在代码中访问salt,以便使用相同的salt加密mongodb数据