首页 > 解决方案 > 使用 PHP OpenSSL 解密 rijndael-128 字符串返回空

问题描述

我想用 rijdael-128 和 ECB 方法解密一个字符串。

这是在 C# 中加密字符串的代码:

static string Encrypt(string plainText, string key){
    string cipherText;
    var rijndael = new RijndaelManaged()
    {
        Key = Encoding.UTF8.GetBytes(key),
        Mode = CipherMode.ECB,
        BlockSize = 128,
        Padding = PaddingMode.Zeros, 
    };
    ICryptoTransform encryptor = rijndael.CreateEncryptor(rijndael.key, null);
    using (var memoryStream = new MemoryStream())
    {
        using (var cryptoStream = new CryptoStream(memoryStream, encryptor,CryptoStreamMode.Write))
        {
            using (var streamWriter = new StreamWriter(cryptoStream))
            {
                streamWriter.Write(plaintext);
                streamWriter.Flush();
            }
            cipherText = Convert.ToBase64String(memoryStream.ToArray());
        }
    }
    return cipherText;
}

我想解密使用上述函数在 PHP 中使用 OpenSSL 生成的加密字符串:

function decrypt($text,$key){
    $encrypted = base64_decode($text);

        $decrypted = rtrim(openssl_decrypt($encrypted, 'AES-256-ECB', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING),"\0");

    
    return $decrypted;
}

但它返回一个空字符串。

我究竟做错了什么?

标签: phpencryptionopenssl

解决方案


推荐阅读