【发布时间】:2015-06-04 03:18:33
【问题描述】:
我有一个项目,我们需要将许多具有纯文本密码的用户迁移到一个新数据库中,我们将在其中对密码进行哈希处理。
新系统使用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);
}
SQL 中是否有类似的东西可以在 INSERT 语句中使用,形成对另一个表的 SELECT?
【问题讨论】:
-
@jjj 有趣,让我探索一下这条路,我从未使用过 CLR 集成,但这可能会完成这项工作
-
@jjj 我做了一个测试,它成功了。虽然使用起来很慢,但我认为值得。为了给你一个想法,它从 7 秒到 18 分钟 :)
-
首先我将纯文本密码迁移到新数据库中,并将它们放入
users表中的TempPassword列中。然后是一个小型控制台应用程序,它将进入每条记录并从纯文本生成密码哈希并使用哈希更新记录。控制台应用程序可能大约有 30 行。然后验证您可以登录,然后删除TempPassword列。快速而肮脏,足以进行一次性迁移。 -
这里有一个很好的答案,关于默认实现如何在 c# 中工作 stackoverflow.com/questions/20621950/… 我最近使用上面和这个 stackoverflow.com/questions/7837547/… 来创建一个解决方案,以在纯 SQL 中生成 hased 密码,可以是在这里找到stackoverflow.com/questions/5033886/…
标签: sql entity-framework sql-server-2012 asp.net-identity