我看了很多质量任务问题,但似乎没有一个问题可以解决我的问题。我正在处理一个遗留系统,其中存储了大约350k个明文密码。我正在为Laravel 4重新设计系统,所以我需要在所有这些条目上使用Laravel的密码散列系统。我试过了:
$users = User::where(DB::raw('length(password)'), '<', 60)->get();
foreach($users as $user)
{
$user->password = Hash::make($user->password);
$user->save();
}
哪个有效,但是花了很多时间,而且我不想等待几天来更新所有这些记录。 (DB是远程的,因此在通信中会有很多额外的延迟时间。)
我希望我可以按照以下方式做点什么:
DB::table('users')->where(DB::raw('length(password)'), '<', 60)
->update(['password'=>????]);
根据Laravel文档,这看起来像我使用的语法,但我不知道我会怎么做????一部分。
非常感谢任何帮助! -Eric
答案 0 :(得分:2)
你必须遍历它们 - 没有其他办法。您需要为每个明文密码计算唯一的盐渍哈希值。
它花费了大量时间的原因&#34;因为Hashing的计算成本很高。您没有注意到1-2个哈希值。但你会得到350k哈希。
它像比特币采矿 - 除了你这次没有得到报酬。
编辑:同样 - 如果用户 的密码长度> 60,则明确文字&#39;在您的旧系统中 - 如果您计划使用Laravel Auth系统,您仍然必须将这些散列为60长度散列 - 因为它会在将密码与数据库进行比较时自动散列密码。
答案 1 :(得分:1)
回答一个老问题,但刚刚遇到几乎相同的问题。
为了没有三天的停机时间,我最终做的是:
答案 2 :(得分:0)
Laravel使用bcrypt
进行散列。 bcrypt
专门设计为缓慢作为安全措施 - 它可以防止攻击者通过快速尝试数百万或数十亿个密码来强制登录,直到找到匹配为止。