如何将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
相关产品推荐
相关产品推荐

