SodiumChachaIetf :: decrypt () phải thuộc kiểu chuỗi, boolean


9

Tôi đã chuyển Magento 1 sang Magento 2.3.0 tất cả đều tốt nhưng khi tôi tạo mẫu khách hàng cả hai bên (phía trước và quản trị viên) tôi đã gặp lỗi liên quan đến giải mã ngay cả khi tôi không thể chỉnh sửa khách hàng khi tôi nhấp vào lưu cùng một lỗi .

Lỗi dưới đây là:

Lỗi nghiêm trọng: Uncaught TypeError: Giá trị trả về của Magento \ Framework \ Encrypt \ Adaptor \ SodiumChachaIetf :: decrypt () phải thuộc chuỗi loại, boolean được trả về trong public_html / nhà cung cấp / magento / framework / Encrypt / Adaptor / SodiumChachaIetf.php: 68 Theo dõi ngăn xếp: # 0 public_html / nhà cung cấp / magento / framework / Mã hóa / Encryptor.php (358): Magento \ Framework \ Encoding \ 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 \ Encrypt \ 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)

# 3 public_html / nhà cung cấp / dotmailer / dotmailer-magento2-extens trong /public_html/vendor/magento/framework/Encoding/Ad CHƯƠNG / SahChachaIetf.php trên dòng 68

Câu trả lời:


16

Chuyển đến tập tin bên dưới:

nhà cung cấp / magento / khung / Mã hóa / Bộ chuyển đổi / SodiumChachaIetf.php

Và cập nhật mã dưới đây:

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

3
Không chỉnh sửa các tập tin cốt lõi.
dudzio

Giải pháp trên từ thảo luận về vấn đề magento github.com/magento/magento2/issues/19590
Barry

Điều này đã sửa nó cho tôi, nhưng vấn đề là gì? Đây chỉ là một lỗi được biết đến?
sam msft

11

Có vẻ như bạn đang sử dụng khóa mật mã sai.

Bạn nên giữ khóa từ cấu hình xem trước của bạn:

ứng dụng / 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>
[...]

Và thay thế cái mới trong dự án mới:

ứng dụng / etc / env.php [Magento 2.x]

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

Nguồn: https://github.com/magento/magento2/issues/19590


1
Điều này xảy ra với tôi sau khi sao chép cơ sở dữ liệu từ máy chủ sang cục bộ, sao chép trợ giúp chính trong các khóa đó.
BartZalas

1
câu trả lời hoàn hảo với lời giải thích !!! làm cho ngày của tôi :) +1
SagarPPanchal

5

Sửa đổi lớp lõi không được khuyến khích ở tất cả. Vấn đề không phải ở lớpvendor/magento/framework/Encryption/Adapter/SodiumChachaIetf.php

Nhưng vấn đề với khóa mật mã được thêm vàoapp/etc/env.php

Lý do của vấn đề này là khóa mật mã không khớp. Bạn phải lấy kết xuất cơ sở dữ liệu từ bất kỳ phiên bản nào khác và cố gắng chạy với phiên bản hiện tại của bạn. Vì vậy, cùng với cơ sở dữ liệu, bạn cần lấy khóa mật mã từ cùng một thiết lập nơi bạn nhận được kết xuất db.

Chỉ cần cập nhật khóa mật mã trong env.php và nó sẽ hoạt động tốt.

Cách khắc phục là sử dụng cùng một khóa mật mã của cài đặt từ nơi db đang được sử dụng.

Hy vọng nó được giải thích.

Đánh dấu tôi lên nếu hữu ích. Chúc mừng mã hóa .. !!


1
Điều này đã giải quyết vấn đề cho tôi và được tham chiếu trong vấn đề Magith github ( github.com/magento/magento2/issues/19590#issuecomment-458731483 ). Tôi nghĩ rằng đây phải là câu trả lời chính xác
caspertm

Chỉ cần loại bỏ khóa mật mã và nó đã giúp. Cảm ơn!
Serge Uskov

3

Tới tập tin này:

nhà cung cấp / magento / khung / Mã hóa / Bộ chuyển đổi / SodiumChachaIetf.php

Và cập nhật mã dưới đây:

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

Chỉ cần thay đổi kiểu trả về hàm: Từ

return $plainText

đến

return (string) $plainText

Đã làm cho tôi..!
Ashish Viradiya

1

Thêm một FYI vẫn trong 2,3 phát triển chi nhánh.

https://github.com/magento/magento2/blob/2.3-develop/lib/iternal/Magento/Framework/Encoding/Ad Module / SemChachaIetf.php

Sửa lỗi magento chính thức là đây

    /**
     * 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 : '';
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.