如何在PHP的数据库中存储random_bytes?

时间:2019-01-29 18:11:45

标签: php laravel laravel-5 encryption libsodium

在迁移过程中,我有一个名为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():在输入字符串中检测到非法字符

我如何在数据库中存储此密钥以供将来参考?

1 个答案:

答案 0 :(得分:1)

您可以base64_encode进行存储,并使用base64_decode撤消它。

将一组accessor and mutator functions放在一起将使您以自动方式进行操作。