我有一个带有加密(非散列(密码的用户表。
我想更新使用某种加密的行(并非所有行都使用这种加密(
我需要使用旧的密码值,对其进行解密,然后使用新的加密进行加密。
$result = DB::connection('writer')
->table('users')
->where('pw', 'LIKE', 'oldEncryption')
->get();
foreach($result as $r){
$password = olddecrypt($r->pw);
$newpassword = newencrypt($password);
$r->pw = $newpassword;
}
DB::connection('writer')
->table('users')
->update($result);
这是不工作的"伪代码"有什么好的方法吗?
这应该会让您朝着正确的方向开始。
$users = DB::connection('writer')
->table('users')
->where('pw', 'LIKE', 'oldEncryption')
->get();
foreach ($users as $user) {
DB::connection('writer')
->table('users')
->where('id', $user->id)
->update(['pw' => newencrypt(olddecrypt($user->pw))]);
}
我假设newencrypt
和olddecrypt
是您自己的实现。
首先,我们需要知道旧的加密类型是什么,如果是md5,你可以尝试md5解密网站,但你找不到所有密码的解密。
但是,如果旧的加密方法比md5更复杂,你将无法使用我所知道的任何方法来解密它们,你只需要比较两个加密值,比如在laravel中使用的bcrypt。