Как я могу хранить random_bytes в базе данных на PHP? - PullRequest
0 голосов
/ 29 января 2019

Внутри моей миграции у меня есть строковый столбец с именем 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 Неверная строказначение: '\ xFFX \ x8Af \ x1F $ ...' для столбца 'encryption_key' в строке 1 (SQL: вставить в chat_headers (encryption_key) значения (ÿ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 (): обнаружен недопустимый символ во входной строке

Как можноЯ храню этот ключ для использования в будущем в моей БД?

1 Ответ

0 голосов
/ 29 января 2019

Вы можете base64_encode сохранить его и отменить с помощью base64_decode.

Соединение набора функций доступа и мутатора позволит вам сделать это автоматически.

...