gpt4 book ai didi

asp.net - 将密码格式从加密更改为散列

转载 作者:行者123 更新时间:2023-12-03 21:20:27 24 4
gpt4 key购买 nike

我发现关于将现有数据库从加密密码转换为散列密码的信息非常少。 (我能够找到更多有关以另一种方式转换的信息,但这并没有多大帮助。)

大多数人都知道,更改 passwordFormat web.config 中的设置仅影响新用户。我有一个包含几百个用户的数据库,我想将它们转换为使用散列密码而不更改那些现有密码。

有没有其他人熟悉如何处理这个问题?感谢您提供任何提示。

最佳答案

Greg 的解决方案是一个好的开始,但不会影响现有用户。 SqlMembershipProvider 通过将 PasswordFormat(0=clear,1=Hashed,2=Encrypted)与密码一起存储在表中来保护现有用户和密码。更改提供者密码格式仅影响对用户表的插入。为了将现有用户的密码转换为 Hashed,您必须更改每个条目的 PasswordFormat 参数。这是一个简单的方法来做到这一点:

void HashAllPasswords()
{
var clearProvider = Membership.Providers["SqlProvider_Clear"];
var hashedProvider = Membership.Providers["SqlProvider_Hashed"];
int dontCare;
if (clearProvider == null || hashedProvider == null) return;
var passwords = clearProvider.GetAllUsers(0, int.MaxValue, out dontCare)
.Cast<MembershipUser>().ToDictionary(u => u.UserName, u => u.GetPassword());

using (var conn = new SqlConnection(
ConfigurationManager.ConnectionStrings[0].ConnectionString))
{
conn.Open();
using (var cmd = new SqlCommand(
"UPDATE [aspnet_Membership] SET [PasswordFormat]=1", conn))
cmd.ExecuteNonQuery();
}

foreach (var entry in passwords)
{
var resetPassword = hashedProvider.ResetPassword(entry.Key, null);
hashedProvider.ChangePassword(entry.Key, resetPassword, entry.Value);
}
}

关于asp.net - 将密码格式从加密更改为散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4948824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com