SodiumChachaIetf :: decrypt () muss vom Typ string sein, boolean

9

Ich habe Magento 1 auf Magento 2.3.0 migriert. Alles ist in Ordnung. Wenn ich jedoch ein Kundenformular auf beiden Seiten (Front und Admin) erstelle, wird der Fehler beim Entschlüsseln angezeigt, auch wenn ich den Kunden nicht bearbeiten kann, wenn ich auf Speichern klicken. Der gleiche Fehler ist aufgetreten .

Der folgende Fehler ist:

Schwerwiegender Fehler: Nicht erfasster TypeError: Rückgabewert von Magento \ Framework \ Encryption \ Adapter \ SodiumChachaIetf :: decrypt () muss vom Typ string sein, boolean, der in public_html / vendor / magento / framework / Encryption / Adapter / SodiumChachaIetf.php: 68 zurückgegeben wird Stapelverfolgung: # 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 (Objekt (Magento \ Store \ Model \ Website \ Interceptor))

# 3 public_html / vendor / dotmailer / dotmailer-magento2-extens in /public_html/vendor/magento/framework/Encryption/Adapter/SodiumChachaIetf.php in Zeile 68

Krunal Pandya
quelle

Antworten:

16

Gehen Sie zur folgenden Datei:

Hersteller / Magento / Framework / Verschlüsselung / Adapter / SodiumChachaIetf.php

Und Update unter Code:

$plainText = sodium_crypto_aead_chacha20poly1305_ietf_decrypt(
            $payload,
            $nonce,
            $nonce,
            $this->key
        );
        if ($plainText == false)
        {
          return "";
        }
        return $plainText;
Rakesh Donga
quelle
3
Bearbeiten Sie keine Kerndateien.
Dudzio
Oben Lösung von Magento Issue Diskussion github.com/magento/magento2/issues/19590
Barry
das hat es für mich behoben, aber was ist das Problem? Ist das nur ein bekannter Fehler?
Sam Msft
11

Sieht so aus, als würden Sie den falschen Kryptoschlüssel verwenden.

Sie sollten den Schlüssel aus Ihrer Vorschau-Konfiguration behalten:

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

Und ersetzen Sie das neue im neuen Projekt:

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

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

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

Eduan Lenine
quelle
1
Dies passiert mir, nachdem ich die Datenbank vom Server auf den lokalen kopiert habe und auch die Schlüsselhilfe in diesen Schlüsseln kopiert habe.
BartZalas
1
perfekte Antwort mit Erklärung !!! machte meinen Tag :) +1
SagarPPanchal
5

Das Ändern der Kernklasse wird überhaupt nicht empfohlen. Das Problem liegt nicht bei der Klassevendor/magento/framework/Encryption/Adapter/SodiumChachaIetf.php

Aber das Problem mit dem Krypta-Schlüssel wurde Ihrem hinzugefügtapp/etc/env.php

Der Grund für dieses Problem ist, dass der Kryptaschlüssel nicht übereinstimmt. Sie müssen den Datenbankspeicherauszug von einer anderen Instanz übernommen und versucht haben, mit Ihrer aktuellen Instanz ausgeführt zu werden. Zusammen mit der Datenbank müssen Sie also den Kryptaschlüssel aus demselben Setup beziehen, aus dem Sie den Datenbankspeicherauszug erhalten haben .

Aktualisieren Sie einfach die Krypta Schlüssel in env.php und es wird gut funktionieren.

Das Update besteht darin, denselben Kryptaschlüssel der Installation zu verwenden, von der aus die Datenbank verwendet wird.

Hoffe es wird erklärt.

Markiere mich, wenn es hilfreich war. Viel Spaß beim Codieren .. !!

Sandipan S.
quelle
1
Dies löste das Problem für mich und wurde in der Magento-Github-Ausgabe ( github.com/magento/magento2/issues/19590#issuecomment-458731483 ) erwähnt. Ich denke, das sollte die richtige Antwort sein
caspertm
Einfach Krypta-Schlüssel entfernt und es hat geholfen. Vielen Dank!
Sergey Uskov
3

Gehen Sie zu dieser Datei:

Hersteller / Magento / Framework / Verschlüsselung / Adapter / SodiumChachaIetf.php

Und Update unter Code:

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

Ändern Sie einfach den Funktionsrückgabetyp: Von

return $plainText

zu

return (string) $plainText
Aarpi
quelle
Arbeitete für mich ..!
Ashish Viradiya
1

Mehr ein FYI noch in 2.3 Zweig entwickeln.

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

Offizieller Magento Fix ist dies

    /**
     * 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 : '';
    }
Dominic Xigen
quelle