Laravel расшифровка с секретным ключом - PullRequest
0 голосов
/ 02 апреля 2020

Мне нужно хранить данные кредитной карты в базе данных в зашифрованном виде. И затем для дальнейшего использования я хочу расшифровать этот шифр с помощью пароля или секретного ключа.

Я новичок с laravel. Я уже преобразовал пароль в ha sh с laravel, если я буду использовать laravel шифрование пароля, то я не смогу расшифровать данные карты. Потому что я знаю, что это односторонний алгоритм.

Я выполнил поиск по stackoverflow и в Google, но не нашел никакой полезной информации.

Теперь я хочу знать, как я могу сохранить данные карты в базе данных mysql с безопасным шифрованием, которое должно быть расшифровано с помощью секретного ключа или пароля.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Когда вы шифруете пароль, он использует Hash::make(), который использует внутреннюю функцию PHP password_hash()

Но когда вы шифруете, используя Crypt::encrypt(), он использует openssl, base_64, ваш .env APP_KEY как соль и некоторые другие вещи, которые здесь

 /**
     * Encrypt the given value.
     *
     * @param  mixed  $value
     * @param  bool  $serialize
     * @return string
     *
     * @throws \Illuminate\Contracts\Encryption\EncryptException
     */
    public function encrypt($value, $serialize = true)
    {
        $iv = random_bytes(openssl_cipher_iv_length($this->cipher));

        // First we will encrypt the value using OpenSSL. After this is encrypted we
        // will proceed to calculating a MAC for the encrypted value so that this
        // value can be verified later as not having been changed by the users.
        $value = \openssl_encrypt(
            $serialize ? serialize($value) : $value,
            $this->cipher, $this->key, 0, $iv
        );

        if ($value === false) {
            throw new EncryptException('Could not encrypt the data.');
        }

        // Once we get the encrypted value we'll go ahead and base64_encode the input
        // vector and create the MAC for the encrypted value so we can then verify
        // its authenticity. Then, we'll JSON the data into the "payload" array.
        $mac = $this->hash($iv = base64_encode($iv), $value);

        $json = json_encode(compact('iv', 'value', 'mac'), JSON_UNESCAPED_SLASHES);

        if (json_last_error() !== JSON_ERROR_NONE) {
            throw new EncryptException('Could not encrypt the data.');
        }

        return base64_encode($json);
    }

Другими словами, у password_ha sh нет ключа для расшифровки, но у Crypt::encrypt() есть, и если вы выбрали go с помощью crypt: : зашифруйте и сохраните его в базе данных, убедитесь, что вы получили копию своего .env файла APP_KEY

0 голосов
/ 02 апреля 2020

Laravel имеет встроенные функции шифрования / дешифрования.

$cc = encrypt($value);

Сохранение $ cc в базе данных.

Чтобы получить его:

$cc = decrypt($ccfromdatabase);

Эти функции используют ключ приложения, сгенерированный при установке, для управления шифрованием, но вы можете переопределить ключ, углубившись немного глубже. Полные документы находятся здесь: https://laravel.com/docs/7.x/encryption

Существует также полезный пакет, который автоматически шифрует / дешифрует данные, когда они поступают в базу данных и из нее через ваши модели. Он работает с Laravel 6.0 +

https://github.com/betterapp/laravel-db-encrypter

Этот пакет позволяет определить, какие поля будут зашифрованы / расшифрованы при хранении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...