Laravel 有一个允许加密的内置 Crypt 类。 key 与应用相关联,可以根据请求使用类似以下内容进行更改:
$key = env('DEV_CACHE_KEY', 'DEV_CHANGE');
Crypt::setKey($key); // sets to new key
$action->descr = Crypt::encrypt($request->descr);
Crypt::setKey(Config::get('app.key')); // resets key to app
$action->save()
我们使用保存在特定服务器上的 Memcached key 来保存我们的数据。这设置为通过 Memcached 类检索,但现在我使用保存到应用程序环境的定义键。定义的 key 在 MySQLs AES_DECRYPT()
中用于解密保存的数据。我们正在努力保持向后兼容性,因此我需要能够执行类似 MySQLs AES_ENCRYPT()
的操作。
上面的代码不起作用,因为当我用下面的代码解密时,它返回空。
$ynak = env('DEV_CACHE_KEY', 'DEV_CHANGE');;
return DB::connection('action_table')
->table('action AS a')
->select('a.*', DB::raw('AES_DECRYPT(`descr`, "'.$ynak.'") as `descr`'), DB::raw('(status LIKE "%completed%" OR status LIKE "%closed%") as isClosed'));
表格的设置方式有点不好,因为我继承了它,但我不允许进行更改。
有没有办法使用 Crypt::encrypt
来等同于 MySQL AES_ENCRYPT
?
最佳答案
我没有找到按照我要求的方式成功执行此操作的方法。如果另一个用户发布了我可以接受的答案,但这是我的解决方法。
以某种方式创建模型的新实例。所有方式都可以接受。它应该只创建模型并保存到数据库中。
到那时你就会有一个 id(你应该有一个自动增量 id 来引用)。
$action = new Action();
...
$action->save();
$id = $action->id;
$key = env('DEV_CACHE_KEY', 'DEV_CHANGE');
DB::connection('action_table')->table('action')->where('id', '=', $id)->update([
'descr' => DB::raw('AES_ENCRYPT("'.$request->descr.'", "'.$key.'")')
]);
这将根据需要进行 AES 加密并创建新操作。唯一的问题是您无法使用$action->descr
来成功显示保存的文本/加密文本。我不需要那种能力,所以这无关紧要。
关于mysql - 使用 AES_ENCRYPT 在 Eloquent 模型中加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31542452/