Расшифровать сообщение AES в OpenSSL PHP, зашифрованное в C# - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть два приложения, одно из которых записано в C#, другое в PHP.

C# приложение шифрует сообщения с использованием AES 256 CB C. Ключ, используемый для шифрования, находится в свойстве byte[], жестко закодированном в классе. Вектор инициализации также жестко закодирован и одинаков во времени.

C# Приложение

byte[] key  = {142, 237, ....};
byte[] InitilizationVector  = {132, ...};
var mensajeSinEncriptar = "";

SymmetricAlgorithm algoritmo = SymmetricAlgorithm.Create("Rijndael");
algoritmo.BlockSize = 128;
algoritmo.Mode = CipherMode.CBC;
algoritmo.Padding = PaddingMode.Zeros;
algoritmo.KeySize = 256;
algoritmo.Key = key;
algoritmo.IV = InitilizationVector;

ICryptoTransform encriptador  = algoritmo.CreateEncryptor();
byte[] textoPlano = Encoding.Default.GetBytes(mensajeSinEncriptar);
MemoryStream memoryStream = new MemoryStream();

CryptoStream cryptoStream = new CryptoStream(memoryStream, encriptador, CryptoStreamMode.Write);
cryptoStream.Write(textoPlano, 0, textoPlano.Length);
cryptoStream.FlushFinalBlock();

memoryStream.Close();
cryptoStream.Close();

return Convert.ToBase64String(memoryStream.ToArray());

Затем в моем приложении PHP я хочу расшифровать сообщения, сгенерированные c # с использованием OpenSSL. Я использую тот же ключ и IV, что и в C#. Я преобразую их в символы, потому что функция не принимает ничего, кроме строки.

PHP

    private function decrypt(string $message)
    {
        $stringOf = function ($bytes) {
            return implode('', array_map('chr', $bytes));
        };

        $key = [142, 237, ...];
        $iv  = [132, ... ];

        $result = openssl_decrypt(
            base64_decode($message), 
            'aes-256-cbc', 
            $stringOf($key), 
            1, 
            $stringOf($iv)
        );

        if (is_bool($result) && !$result) {
            return new Error('Error: ' . openssl_error_string());
        }

        return $result;
    }

Когда я пытаюсь расшифровать, я получаю эту ошибку

Ошибка: ошибка: 06065064: процедуры цифрового конверта: EVP_DecryptFinal_ex: плохая расшифровка

Я думаю, что это моя ошибка при попытке преобразовать ключ в строку. Так как у меня также есть функция для шифрования, которая дает мне разные результаты, используя тот же ключ и iv, используемые в C#.

...