是否可以在 .NET 中 运行 一个 PHP 函数?

Is it possible to run a PHP function in .NET?

我正在尝试在 C# 中解密 AES-128 CBC 字符串,但没有成功(尝试了我在互联网上找到的每种加密类型的解密方法)。

我得到结果的唯一方法是使用以下代码解密 PHP 中的那些字符串:

<?php
$crypto_data = hex2bin($crypto_data_hex);
$real_data = openssl_decrypt($crypto_data,
                                    'AES-128-CBC',
                                    '23d854ce7364b4f7',
                                    OPENSSL_RAW_DATA,
                                    '23d854ce7364b4f7');
?>

那么,有没有办法在 .NET 中 运行 这个 PHP 代码(使用 PHP.dll 库或类似的东西)?或者在 .NET C# 中是否有用于此操作的 real 等效方法?

谢谢

问题似乎归结为编写等同于 PHP 函数的 C# 函数。

试试这个代码:

public class Program
{
    public static byte[] HexToBytes(string hex)
    {
        int numberChars = hex.Length;
        byte[] bytes = new byte[numberChars / 2];
        for (int i = 0; i < numberChars; i += 2)
        {
            bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
        }

        return bytes;
    }

    static string Decrypt(byte[] cipherText, byte[] key, byte[] iv)
    {
        string plaintext;
        
        AesManaged aes = new AesManaged
        {
            Mode = CipherMode.CBC,
            Padding = PaddingMode.PKCS7,
            BlockSize = 128,
            Key = key,
            IV = iv
        };

        using (aes)
        {
            ICryptoTransform decryptor = aes.CreateDecryptor();
            using (MemoryStream ms = new MemoryStream(cipherText))
            {
                using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader reader = new StreamReader(cs))
                    {
                        plaintext = reader.ReadToEnd();
                    }
                }
            }
        }

        return plaintext;
    }

    public static void Main()
    {
        string crypto_data_hex = "00965fa56e761b11d37b887f98e6bcc2"; // paste $crypto_data_hex value here

        string sKey = "23d854ce7364b4f7";
        string sIv  = "23d854ce7364b4f7";

        byte[] encrypted = HexToBytes(crypto_data_hex);
        byte[] key = Encoding.ASCII.GetBytes(sKey);
        byte[] iv = Encoding.ASCII.GetBytes(sIv);
        
        string decrypted = Decrypt(encrypted, key, iv);
        Console.WriteLine(decrypted);
    }
}