Inside of my migration I have a string column named encryption_key
which looks like this:
$table->string('encryption_key')->unique();
I have a Controller that uses a trait to generate the encryption commands.
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');
}
The trait looks like this so far
trait LiveChat
{
protected function issueKey()
{
return random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
}
}
However, upon testing this I receive this error:
SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value: ‘xFFXx8Afx1F$…’ for column ‘encryption_key’ at row 1 (SQL: insert into
chat_headers
(encryption_key
) values (ÿXŠfx1F$¨ì™ÒÂø¢Ú!£”…¸ÈÍØ7ÿDåx00Œ¿3ê))
If I use dd()
to debug the response of $this->issueKey()
I get something like this:
b"Bp,[x1A¢®ù·š(×g6ùs=l«j,©;_ó8ýòúÍ6"
I have tried to use iconv()
like so
iconv("UTF-8", "ASCII", $this->issueKey())
Which gives me
iconv(): Detected an illegal character in input string
How can I store this key to use for future reference inside my DB?
Advertisement
Answer
You can base64_encode
it for storage, and undo it with base64_decode
.
Putting together a set of accessor and mutator functions will let you do this in an automatic fashion.