SodiumChachaIetf :: decrypt () должен иметь тип string, логическое значение


9

Я выполнил миграцию Magento 1 на Magento 2.3.0, все хорошо, но когда я создаю форму клиента для обеих сторон (фронт и админ), у меня появляется ошибка, связанная с расшифровкой, даже я не могу редактировать клиента, когда я нажимаю на кнопку сохранения. ,

Ниже ошибка:

Неустранимая ошибка: Uncaught TypeError: Возвращаемое значение Magento \ Framework \ Encryption \ Adapter \ SodiumChachaIetf :: decrypt () должно быть строки типа, логическое значение возвращается в public_html / vendor / magento / framework / Encryption / Adapter / SodiumChachaIetf.php: 68 Трассировка стека: # 0 public_html / vendor / magento / framework / Encryption / Encryptor.php (358): Magento \ Framework \ Encryption \ Adapter \ SodiumChachaIetf-> decrypt ('"\ x10 \ x88 \ x8E \ xB5 \ x851; H \ XB1 \ x12 \ xE1aaP ... ')

# 1 /public_html/vendor/dotmailer/dotmailer-magento2-extension/Helper/Data.php(744): Magento \ Framework \ Encryption \ Encryptor-> decrypt ('IhCIjrWFMTtIsRL ...')

# 2 /public_html/vendor/dotmailer/dotmailer-magento2-extension/Helper/Data.php(203): Dotdigitalgroup \ Email \ Helper \ Data-> getApiPassword (объект (Magento \ Store \ Model \ Website \ Interceptor))

# 3 public_html / vendor / dotmailer / dotmailer-magento2-extens в /public_html/vendor/magento/framework/Encryption/Adapter/SodiumChachaIetf.php в строке 68

Ответы:


16

Перейти к файлу ниже:

продавец / Magento / рамки / Шифрование / адаптер / SodiumChachaIetf.php

И обновить ниже код:

$plainText = sodium_crypto_aead_chacha20poly1305_ietf_decrypt(
            $payload,
            $nonce,
            $nonce,
            $this->key
        );
        if ($plainText == false)
        {
          return "";
        }
        return $plainText;

3
Не редактируйте основные файлы.
Дудзио

Выше решение из обсуждения проблемы
Барри

это исправило это для меня, но в чем проблема? Это просто известная ошибка?
Сам MSFT

11

Похоже, вы используете не тот ключ шифрования.

Вы должны сохранить ключ от конфигурации предварительного просмотра:

app / etc / local.xml [Magento 1.x]

<?xml version="1.0"?>
<config>
  <global>
    <install>
      <date>{{date}}</date>
    </install>
    <crypt>
       <key>123456_same_old_key_7890</key>
    </crypt>
[...]

И замените новый в новом проекте:

app / etc / env.php [Magento 2.x]

<?php
[...],
'crypt' => [
    'key' => '123456_same_old_key_7890'
],
[...]

Источник: https://github.com/magento/magento2/issues/19590


1
Это происходит со мной после копирования базы данных с сервера на локальную, также копируя справку по ключам в этих ключах.
БартЗалас

1
идеальный ответ с объяснением !!! сделал мой день :) +1
SagarPPanchal

5

Модификация базового класса вообще не рекомендуется. Вопрос не с классомvendor/magento/framework/Encryption/Adapter/SodiumChachaIetf.php

Но проблема с ключом шифрования добавлена ​​к вашемуapp/etc/env.php

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

Просто обновите ключ шифрования в env.php, и он будет работать нормально.

Исправление состоит в том, чтобы использовать тот же ключ шифрования установки, откуда используется БД.

Надеюсь, это объяснено.

Отметьте меня, если было полезно. Удачного кодирования .. !!


1
Это решило проблему для меня и было упомянуто в выпуске Magento Github ( github.com/magento/magento2/issues/19590#issuecomment-458731483 ). Я думаю, что это должен быть правильный ответ
caspertm

Просто удалил ключ шифрования и это помогло. Спасибо!
Сергей Усков

3

Перейти к этому файлу:

продавец / Magento / рамки / Шифрование / адаптер / SodiumChachaIetf.php

И обновите ниже код:

 public function decrypt(string $data): string
    {
        $nonce = mb_substr($data, 0, SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES, '8bit');
        $payload = mb_substr($data, SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES, null, '8bit');

        $plainText = sodium_crypto_aead_chacha20poly1305_ietf_decrypt(
            $payload,
            $nonce,
            $nonce,
            $this->key
        );

        return (string) $plainText;
    }

Просто измените тип возвращаемого значения функции:

return $plainText

в

return (string) $plainText

Работал на меня ..!
Ашиш Вирадия

1

Еще к вашему сведению еще в 2.3 развиваю ветку.

https://github.com/magento/magento2/blob/2.3-develop/lib/internal/Magento/Framework/Encryption/Adapter/SodiumChachaIetf.php

Официальное исправление magento это

    /**
     * Decrypt a string
     *
     * @param string $data
     * @return string
     */
    public function decrypt(string $data): string
    {
        $nonce = mb_substr($data, 0, SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES, '8bit');
        $payload = mb_substr($data, SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES, null, '8bit');
        try {
            $plainText = sodium_crypto_aead_chacha20poly1305_ietf_decrypt(
                $payload,
                $nonce,
                $nonce,
                $this->key
            );
        } catch (\SodiumException $e) {
            $plainText = '';
        }
        return $plainText !== false ? $plainText : '';
    }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.