SodiumChachaIetf :: decrypt () deve ser do tipo string, boolean


9

Eu fiz a migração do Magento 1 para o Magento 2.3.0 tudo está bom, mas quando eu crio o formulário do cliente em ambos os lados (frente e administrador), recebi o erro relacionado à descriptografia, mesmo que não seja possível editar o cliente ao clicar em salvar, o mesmo erro ocorreu .

Abaixo o erro é:

Erro fatal: TypeError não detectado: o valor de retorno do Magento \ Framework \ Encryption \ Adapter \ SodiumChachaIetf :: decrypt () deve ser do tipo string, booleano retornado em public_html / vendor / magento / framework / Encryption / Adapter / SodiumChachaIetf.php: 68 Rastreio de pilha: # 0 public_html / vendor / magento / framework / Encryption / Encryptor.php (358): Magento \ Framework \ Encryption \ Adapter \ SodiumChachaIetf-> decriptografar ('"\ 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-> descriptografar ('IhCIjrWFMTtIsRL ...')

# 2 /public_html/vendor/dotmailer/dotmailer-magento2-extension/Helper/Data.php(203): Dotdigitalgroup \ Email \ Helper \ Data-> getApiPassword (Objeto (Magento \ Loja \ Modelo \ Site \ Interceptor))

# 3 public_html / vendor / dotmailer / dotmailer-magento2-extens em /public_html/vendor/magento/framework/Encryption/Adapter/SodiumChachaIetf.php na linha 68

Respostas:


16

Vá para o arquivo Abaixo:

fornecedor / magento / framework / Criptografia / adaptador / SodiumChachaIetf.php

E atualização abaixo do código:

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

3
Não edite arquivos principais.
dudzio 14/02/19

Solução acima da discussão sobre a questão do magento github.com/magento/magento2/issues/19590
Barry

isso corrigiu para mim, mas qual é o problema? Isso é apenas um bug conhecido?
sam msft

11

Parece que você está usando a chave de criptografia errada.

Você deve manter a chave na configuração das visualizações:

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 substitua o novo no novo projeto:

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

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

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


11
Isso aconteceu comigo depois de copiar o banco de dados do servidor para o local, copiando também a ajuda chave nessas chaves.
BartZalas 31/07/19

11
resposta perfeita com explicação !!! made my day :) +1
SagarPPanchal

5

Modificar a classe principal não é recomendado. O problema não é da classevendor/magento/framework/Encryption/Adapter/SodiumChachaIetf.php

Mas o problema com a chave de criptografia adicionado ao seuapp/etc/env.php

O motivo desse problema é que a chave de criptografia é incompatível. Você deve ter retirado o despejo do banco de dados de qualquer outra instância e tentando executar com sua instância atual. Então, junto com o banco de dados, você precisa obter a chave de criptografia da mesma configuração de onde você obteve o db dump.

Basta atualizar a chave de criptografia no env.php e ela funcionará bem.

A correção é usar a mesma chave de criptografia da instalação de onde o db está sendo usado.

Espero que seja explicado.

Marque-me se foi útil. Feliz codificação .. !!


11
Isso resolveu o problema para mim e foi mencionado na edição do github do Magento ( github.com/magento/magento2/issues/19590#issuecomment-458731483 ). Eu acho que essa deve ser a resposta correta #
2828 Caspertm

Acabei de remover a chave de criptografia e isso ajudou. Obrigado!
Sergey Uskov 22/01

3

Vá para este arquivo:

fornecedor / magento / framework / Criptografia / adaptador / SodiumChachaIetf.php

E atualize abaixo do 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;
    }

Basta alterar o tipo de retorno da função:

return $plainText

para

return (string) $plainText

Trabalhou para mim ..!
Ashish Viradiya

1

Mais um FYI ainda em 2.3 desenvolve ramo.

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

A correção oficial do magento é essa

    /**
     * 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 : '';
    }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.