You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将C# RijndaelManaged AES256加密代码转换为PHP openssl_encrypt实现

问题排查

你现有的PHP实现和C#原版逻辑有三处核心不匹配的问题:

  • 加密算法选择错误:C#代码中KeySize = 0x80对应128位密钥,应使用AES-128-CBC算法,而非你用的AES-256-CBC
  • IV处理逻辑错误:C#代码中IV固定为全0的16字节,不需要随机生成,也不需要拼接在密文前返回
  • 密钥预处理逻辑缺失:C#会将传入的密钥转为UTF8字节后最多取前16位,不足16位的部分补0填充到16字节,你直接传入44位原始密钥不符合要求

正确实现代码

function encryptData(string $textData, string $encryptionKey): string
{
    // 算法固定为AES-128-CBC,和C#逻辑对齐
    $cipher = 'AES-128-CBC';
    // 预处理密钥:转UTF8字节,取前16位,不足补0
    $keyBytes = mb_convert_encoding($encryptionKey, 'UTF-8');
    $key = str_pad(substr($keyBytes, 0, 16), 16, "\x00");
    // IV固定为全0的16字节,和C#逻辑对齐
    $iv = str_repeat("\x00", 16);
    // 加密(openssl_encrypt默认使用PKCS7填充,和C#配置完全匹配)
    $encrypted = openssl_encrypt($textData, $cipher, $key, OPENSSL_RAW_DATA, $iv);
    // 返回base64编码结果
    return base64_encode($encrypted);
}

// 调用示例
$key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$dataToEncrypt = $user . $datetime;
$token = encryptData($dataToEncrypt, $key);

内容的提问来源于stack exchange,提问作者D.Robinson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:06:03