首页 > 解决方案 > 使用 openssl_decrypt 将 VB.NET AES 编码转换为 PHP

问题描述

目前我正在整合用 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 获得相同的结果。该函数总是失败,结果为 false,在代码下方:

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

我很确定问题与我缺少的一些填充有关。但我不明白问题到底出在哪里。

UPDATE1 - 我更正了代码,$iv 和 $key 都是字符串,我忘记了 ' 都是 16Bytes = 128Bits

标签: phpvb.netopensslmcrypt

解决方案


推荐阅读