php - 使用 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
解决方案
推荐阅读
- ms-word - 防止 Mac 上的 Word 在单击时自动跟随超链接
- keycloak - 如何使用 Spring Cloud Gateway 和 Keycloak 验证 curl(或 Postman 或 Ajax)调用
- java - 对之前在 Sonar 中取消引用的值的第 114 行的状态进行 Nullcheck
- iframe - 来自 serviceworker 的 CSP 沙箱
- python - cx_oracle python 问题:ORA-01008:并非所有变量都绑定
- java - 使用 JSch Java 分离使用 PTY 执行的命令 (sudo) 的标准输出和错误输出
- reactjs - 如何使用 apollo refetchQueries 重新获取数据并更新加载状态?
- django - 如何从 csv fromat 中的 django-filters 导出过滤后的数据
- r - 提取字符串中被R中特定模式包围的所有数字
- node.js - 无法通过 Docker 容器运行 NodeJS 微服务