SodiumChachaIetf :: decrypt () doit être de type chaîne, booléen


9

J'ai fait la migration de Magento 1 vers Magento 2.3.0 tout va bien mais quand je crée le formulaire client des deux côtés (avant et administrateur) j'ai eu l'erreur liée au déchiffrement même je ne peux pas éditer le client quand je clique sur enregistrer la même erreur s'est produite .

L'erreur ci-dessous est:

Erreur fatale: TypeError non capturé: valeur de retour de Magento \ Framework \ Encryption \ Adapter \ SodiumChachaIetf :: decrypt () doit être de la chaîne de type, booléen renvoyé dans public_html / vendor / magento / framework / Encryption / Adapter / SodiumChachaIetf.php: 68 Trace de pile: # 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 dans /public_html/vendor/magento/framework/Encryption/Adapter/SodiumChachaIetf.php sur la ligne 68

Réponses:


16

Accédez au fichier ci-dessous:

fournisseur / magento / framework / Cryptage / Adaptateur / SodiumChachaIetf.php

Et mettre à jour le code ci-dessous:

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

3
Ne modifiez pas les fichiers principaux.
dudzio

Solution ci-dessus de la discussion sur le problème de magento github.com/magento/magento2/issues/19590
Barry

cela m'a corrigé, mais quel est le problème? Est-ce juste un bug connu?
sam msft

11

On dirait que vous utilisez la mauvaise clé de cryptage.

Vous devez conserver la clé de la configuration de vos aperçus:

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

Et remplacez le nouveau dans le nouveau projet:

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

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

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


1
Cela m'arrive après avoir copié la base de données du serveur vers le local, en copiant également l'aide clé dans ces clés.
BartZalas

1
réponse parfaite avec explication !!! a fait ma journée :) +1
SagarPPanchal

5

La modification de la classe principale n'est pas recommandée du tout. Le problème n'est pas avec la classevendor/magento/framework/Encryption/Adapter/SodiumChachaIetf.php

Mais le problème avec la clé de cryptage ajoutée à votreapp/etc/env.php

La raison de ce problème est que la clé de cryptage n'est pas compatible. Vous devez avoir pris le vidage de la base de données à partir de toute autre instance et avoir essayé de l'exécuter avec votre instance actuelle. Ainsi, avec la base de données, vous devez obtenir la clé de cryptage de la même configuration d'où vous avez obtenu le vidage de la base de données.

Mettez simplement à jour la clé de cryptage dans env.php et cela fonctionnera bien.

Le correctif consiste à utiliser la même clé de chiffrement de l'installation à partir de laquelle db est utilisé.

J'espère que c'est expliqué.

Marquez-moi si cela vous a été utile. Codage heureux .. !!


1
Cela a résolu le problème pour moi et a été référencé dans le problème du github de Magento ( github.com/magento/magento2/issues/19590#issuecomment-458731483 ). Je pense que cela devrait être la bonne réponse
caspertm

Je viens de retirer la clé de cryptage et cela a aidé. Merci!
Sergey Uskov

3

Accédez à ce fichier:

fournisseur / magento / framework / Cryptage / Adaptateur / SodiumChachaIetf.php

Et mettez à jour le code ci-dessous:

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

Modifiez simplement le type de retour de la fonction:

return $plainText

à

return (string) $plainText

A travaillé pour moi ..!
Ashish Viradiya

1

Plus un FYI encore en 2.3 branche de développement.

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

Le correctif officiel de Magento est le suivant

    /**
     * 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 : '';
    }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.