SodiumChachaIetf :: decrypt () debe ser del tipo string, boolean


9

Realicé la migración de Magento 1 a Magento 2.3.0, todo está bien, pero cuando creo el formulario de cliente de ambos lados (frontal y administrativo) recibí el error relacionado con descifrar, incluso no puedo editar el cliente cuando hago clic en Guardar, se ha producido el mismo error .

Debajo del error es:

Error grave: Error de tipo no capturado: valor de retorno de Magento \ Framework \ Encryption \ Adapter \ SodiumChachaIetf :: decrypt () debe ser del tipo string, boolean devuelto en public_html / vendor / magento / framework / Encryption / Adapter / SodiumChachaIetf.php: 68 Seguimiento de la pila: # 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 (Object (Magento \ Store \ Model \ Website \ Interceptor))

# 3 public_html / vendor / dotmailer / dotmailer-magento2-extens en /public_html/vendor/magento/framework/Encryption/Adapter/SodiumChachaIetf.php en la línea 68

Respuestas:


16

Ir al archivo de abajo:

vendor / magento / framework / Cifrado / Adaptador / SodiumChachaIetf.php

Y actualizar a continuación el código:

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

3
No edite archivos principales.
dudzio

Solución anterior del debate sobre el problema de magento github.com/magento/magento2/issues/19590
Barry

esto me lo solucionó, pero ¿cuál es el problema? ¿Es esto solo un error conocido?
sam msft

11

Parece que estás usando la clave de cripta incorrecta.

Debe mantener la clave de su configuración de vistas previas:

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>
[...]

Y reemplace el nuevo en el nuevo proyecto:

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

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

Fuente: https://github.com/magento/magento2/issues/19590


1
Esto me sucede después de copiar la base de datos del servidor al local, copiando también la ayuda clave en esas claves.
BartZalas

1
respuesta perfecta con explicación !!! hizo mi día :) +1
SagarPPanchal

5

No se recomienda modificar la clase principal en absoluto. El problema no es con la clasevendor/magento/framework/Encryption/Adapter/SodiumChachaIetf.php

Pero el problema con la clave de cripta agregada a suapp/etc/env.php

La razón de este problema es que la clave de la cripta no coincide. Debe haber tomado el volcado de la base de datos de cualquier otra instancia e intentado ejecutar con su instancia actual. Entonces, junto con la base de datos, debe obtener la clave de cifrado de la misma configuración de donde obtuvo el volcado de db.

Simplemente actualice la clave de la cripta en env.php y funcionará bien.

La solución es usar la misma clave de cifrado de la instalación desde donde se está utilizando db.

Espero que se explique.

Marcarme si fue útil. Feliz codificación .. !!


1
Esto resolvió el problema para mí y se hizo referencia en el problema de Magento github ( github.com/magento/magento2/issues/19590#issuecomment-458731483 ). Creo que esta debería ser la respuesta correcta
caspertm

Acabo de quitar la clave de la cripta y ayudó. ¡Gracias!
Sergey Uskov

3

Ve a este archivo:

vendor / magento / framework / Cifrado / Adaptador / SodiumChachaIetf.php

Y actualice el siguiente código:

 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;
    }

Simplemente cambie el tipo de retorno de la función: De

return $plainText

a

return (string) $plainText

Trabajó para mi..!
Ashish Viradiya

1

Más un FYI todavía en 2.3 desarrollar rama.

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

La solución oficial de magento es esto

    /**
     * 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 : '';
    }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.