Преобразование кодировки VB.NET AES в PHP с помощью openssl_decrypt

В настоящее время я работаю над интеграцией внешнего сервиса, написанного на VB.NET. Эта служба отправляет мне строку с некоторой информацией, зашифрованной с помощью функции ниже (это вырезка от разработчика внешней службы, который отправил мне код)

Public Function Decode(ByVal S As String, ByVal chiave As String, ByVal iv As String) As String
    Dim rjm As RijndaelManaged = New RijndaelManaged
    rjm.KeySize = 128
    rjm.BlockSize = 128
    rjm.Key = System.Text.ASCIIEncoding.ASCII.GetBytes(chiave)
    rjm.IV = System.Text.ASCIIEncoding.ASCII.GetBytes(iv)
    Try
        Dim input() As Byte = System.Convert.FromBase64String(S)
        Dim output() As Byte = rjm.CreateDecryptor.TransformFinalBlock(input, 0, input.Length)
        Return System.Text.Encoding.UTF8.GetString(output)
    Catch ex As System.Exception  
        Return S
    End Try
End Function

если я декодирую строку с помощью функции mcrypt ниже, все работает, как ожидалось:

 $mcrypt_cipher = MCRYPT_RIJNDAEL_128;
 $mcrypt_mode = MCRYPT_MODE_CBC;
 $iv= '1234567891011121';
 $key = '1234567891011121';

 $message= base64_decode($message);

 $message = rtrim(mcrypt_decrypt($mcrypt_cipher, $key, $message, $mcrypt_mode, $iv), "\0");;

Но я не могу получить тот же результат с openssl_decrypt. функция всегда терпит неудачу с ложным результатом под кодом:

 $result = openssl_decrypt(
                base64_decode($message),
                'AES-128-CBC',
                $key,
                OPENSSL_RAW_DATA,
                $iv
            );

Я почти уверен, что проблема связана с некоторыми пропущенными заполнителями ... но я не понимаю, в чем именно проблема.

ОБНОВЛЕНИЕ1 - Я исправляю код, и $ iv, и $ key - это строки, я забыл, что оба имеют 16 байт = 128 бит

Разве ваши $key и $iv не должны быть строками вместо числа? AES-128 ожидает 16-байтовый ключ и IV. Таким образом, он, скорее всего, равен 0.

oliv 05.06.2018 15:11

@oliv спасибо, я сделал небольшую опечатку, как указано в моем сообщении об обновлении, обе строки - 128-битные

Marco 06.06.2018 11:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
284
0

Другие вопросы по теме