在迁移过程中,我有一个名为encryption_key
的字符串列,如下所示:
$table->string('encryption_key')->unique();
我有一个使用特征生成加密命令的控制器。
use LiveChat;
public function create()
{
$this->header->insert([
'encryption_key' => $this->issueKey()
]);
$this->participants->insert([
'chat_id' => DB::getPdo()->lastInsertId(),
'user_id' => Auth::id()
]);
return response(['status' => true, 'chat_id' => DB::getPdo()->lastInsertId()], 200)
->header('Content-Type', 'application/json');
}
到目前为止,该特征看起来像这样
trait LiveChat
{
protected function issueKey()
{
return random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
}
}
但是,经过测试,我收到此错误:
SQLSTATE [22007]:无效的日期时间格式:1366错误的字符串值:第1行“ encryption_key”列的“ \ xFFX \ x8Af \ x1F $ ...”(SQL:插入
chat_headers
({{ 1}})值(ÿXŠf\ x1F $¨ì™ÒÂø¢Ú!£”…¸ÈÍØ7ÿDå\x00Œ¿3ê))
如果我使用encryption_key
调试dd()
的响应,则会得到以下信息:
$this->issueKey()
我试图像这样使用b"Bp,[\x1A\¢®ù·š(×g6ùs=l«j,©;_ó8ýòúÍ6"
iconv()
哪个给我
iconv():在输入字符串中检测到非法字符
我如何在数据库中存储此密钥以供将来参考?
答案 0 :(得分:1)
您可以base64_encode
进行存储,并使用base64_decode
撤消它。
将一组accessor and mutator functions放在一起将使您以自动方式进行操作。