如何将 random_bytes 存储在 PHP 的数据库中?
How can I store random_bytes in a database in PHP?
在我的迁移中,我有一个名为 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]: Invalid datetime format: 1366 Incorrect string value: '\xFFX\x8Af\x1F$...' for column 'encryption_key' at row 1 (SQL: insert into chat_headers
(encryption_key
) values (ÿXŠf\x1F$¨ì™ÒÂø¢Ú!£”…¸ÈÍØ7ÿDå\x00Œ¿3ê))
如果我使用 dd()
来调试 $this->issueKey()
的响应,我会得到这样的结果:
b"Bp,[\x1A\¢®ù·š(×g6ùs=l«j,©;_ó8ýòúÍ6"
我试过这样使用iconv()
iconv("UTF-8", "ASCII", $this->issueKey())
这给了我
iconv(): Detected an illegal character in input string
如何存储此密钥以供将来在我的数据库中参考?
您可以 base64_encode
存储它,并使用 base64_decode
撤消它。
将一组 accessor and mutator functions 放在一起可以让您自动执行此操作。
在我的迁移中,我有一个名为 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]: Invalid datetime format: 1366 Incorrect string value: '\xFFX\x8Af\x1F$...' for column 'encryption_key' at row 1 (SQL: insert into
chat_headers
(encryption_key
) values (ÿXŠf\x1F$¨ì™ÒÂø¢Ú!£”…¸ÈÍØ7ÿDå\x00Œ¿3ê))
如果我使用 dd()
来调试 $this->issueKey()
的响应,我会得到这样的结果:
b"Bp,[\x1A\¢®ù·š(×g6ùs=l«j,©;_ó8ýòúÍ6"
我试过这样使用iconv()
iconv("UTF-8", "ASCII", $this->issueKey())
这给了我
iconv(): Detected an illegal character in input string
如何存储此密钥以供将来在我的数据库中参考?
您可以 base64_encode
存储它,并使用 base64_decode
撤消它。
将一组 accessor and mutator functions 放在一起可以让您自动执行此操作。