SodiumChachaIetf :: decrypt () deve essere del tipo stringa, booleano


9

Ho fatto la migrazione da Magento 1 a Magento 2.3.0 tutto è buono ma quando creo il modulo da entrambi i lati (fronte e amministrazione) ho ricevuto l'errore relativo alla decrittografia anche se non riesco a modificare il cliente quando faccio clic su salva lo stesso errore .

Di seguito è riportato l'errore:

Errore irreversibile: TypeError non rilevato: valore di ritorno di Magento \ Framework \ Encryption \ Adapter \ SodiumChachaIetf :: decrypt () deve essere della stringa di tipo, booleano restituito in public_html / vendor / magento / framework / Encryption / Adapter / SodiumChachaIetf.php: 68 Stack trace: # 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 in /public_html/vendor/magento/framework/Encryption/Adapter/SodiumChachaIetf.php on line 68

Risposte:


16

Vai al file qui sotto:

vendor / magento / quadro / crittografia / adattatore / SodiumChachaIetf.php

E aggiorna sotto il codice:

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

3
Non modificare i file core.
dudzio,

Sopra la soluzione della discussione sul problema di Magento github.com/magento/magento2/issues/19590
Barry

questo ha risolto il problema per me, ma qual è il problema? È solo un bug noto?
Sam msft,

11

Sembra che tu stia utilizzando la chiave di crittografia sbagliata.

Dovresti conservare la chiave dalla configurazione delle anteprime:

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

E sostituisci quello nuovo nel nuovo progetto:

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

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

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


1
Questo succede a me dopo aver copiato il database dal server al locale, copiando anche l'aiuto chiave in quelle chiavi.
BartZalas,

1
risposta perfetta con spiegazione !!! fatto il mio giorno :) +1
SagarPPanchal

5

La modifica della classe principale non è affatto consigliata. Il problema non riguarda la classevendor/magento/framework/Encryption/Adapter/SodiumChachaIetf.php

Ma il problema con la chiave di crittografia è stato aggiunto al tuoapp/etc/env.php

Il motivo di questo problema è che la chiave di crittografia non corrisponde. È necessario aver prelevato il dump del database da qualsiasi altra istanza e aver tentato di eseguirlo con l'istanza corrente. Quindi, insieme al database, devi ottenere la chiave di crittografia dalla stessa configurazione da cui hai ottenuto il db dump.

Basta aggiornare la chiave di crittografia in env.php e funzionerà bene.

La correzione consiste nell'utilizzare la stessa chiave di crittografia dell'installazione da cui viene utilizzato db.

Spero che sia spiegato.

Contrassegnami se è stato utile. Buona codifica .. !!


1
Ciò ha risolto il problema per me ed è stato menzionato nel problema github di Magento ( github.com/magento/magento2/issues/19590#issuecomment-458731483 ). Penso che questa dovrebbe essere la risposta corretta
caspertm,

Ho appena rimosso la chiave di crittografia e mi ha aiutato. Grazie!
Sergey Uskov,

3

Vai a questo file:

vendor / magento / quadro / crittografia / adattatore / SodiumChachaIetf.php

E aggiorna sotto il codice:

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

Basta cambiare il tipo di ritorno della funzione: Da

return $plainText

per

return (string) $plainText

Ha funzionato per me ..!
Ashish Viradiya,

1

Più un FYI ancora in 2.3 sviluppa succursale.

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

La correzione ufficiale di Magento è questa

    /**
     * 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 : '';
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.