В настоящее время я работаю над интеграцией внешнего сервиса, написанного на 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 бит
@oliv спасибо, я сделал небольшую опечатку, как указано в моем сообщении об обновлении, обе строки - 128-битные






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