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.