2015-07-21 108 views
1

Laravel有一個內置的地穴類,允許加密。關鍵是相關聯的應用程序,並能按要求使用類似的改變:雄辯模型AES_ENCRYPT加密

$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的關鍵我們的數據。這設置爲通過Memcached類檢索,但現在我正在使用定義的鍵保存到應用程序環境。定義的密鑰在MySQL 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

回答

0

我沒有找到成功的方法來做到這一點,我要問的方式。如果其他用戶發佈了我可以接受的答案,但這是我的解決方法。

以某種方式創建模型的新實例。所有的方式都可以接受它應該只是創建模型並保存到數據庫中。

那時你會有一個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成功顯示保存的文本/加密文本。我並不需要這種能力,所以無關緊要。