gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:33:14 26 4
gpt4 key购买 nike

我有一个项目,我们需要将许多拥有纯文本密码的用户迁移到一个新数据库中,我们将在其中散列密码。

新系统使用 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);
}

我可以在 INSERT 语句中使用 SQL 中的类似内容形成对另一个表的 SELECT 吗?

最佳答案

不是内置的,散列是 CPU 密集型的,通常是您希望在数据库服务器上避免的操作,但我意识到迁移不是正常操作。解决方案在一定程度上取决于您为什么要在 SQL 中运行。

如果是因为简单,我会在这个问题中查看类似的内容 Is there a SQL implementation of PBKDF2?

如果是因为性能,我会考虑只构建一个小型 .net 迁移器并使用批量插入/更新。例如与
https://github.com/MikaelEliasson/EntityFramework.Utilities#batch-update-entities您只能通过选择读取 UserId 和纯文本密码。在 .net 中散列它,然后以可能超过 100k 更新/秒的速度批量更新数据库。

现在有两个轻微警告
确保交易日志中没有出现纯文本密码。最好是在源数据库中进行散列,然后再进入新数据库。否则可以在初始导入后清除事务日志 How do you clear the SQL Server transaction log?

您可以使用 PasswordHasher,而不是自己编写散列方法,这是 Asp.net 身份在默认情况下使用的。它反过来使用 Rfc2898DeriveBytes。看到这个答案 https://stackoverflow.com/a/21496255/507279

关于sql - 将普通密码转换为 EF Asp.Net Identity PasswordHash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30634371/

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