1

我正在尝试使用 PHP 实现与 C# 代码相同的结果。加密算法是 RC2,RC2CryptoServiceProvider用于 .NET 和mcrypt()PHP。

这是 C# 部分:

public static string encryptRC2(string datastring, string keystring, string ivstring)
{
    byte[] bytes = Encoding.UTF8.GetBytes(datastring);
    byte[] rgbKey = Encoding.ASCII.GetBytes(keystring);
    byte[] rgbIV = Encoding.ASCII.GetBytes(ivstring);
    MemoryStream stream = new MemoryStream();
    RC2CryptoServiceProvider provider = new RC2CryptoServiceProvider
    {
        KeySize = 0x40,
        BlockSize = 0x40
    };
    CryptoStream stream2 = new CryptoStream(stream, provider.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
    stream2.Write(bytes, 0, bytes.Length);
    stream2.FlushFinalBlock();
    return Convert.ToBase64String(stream.ToArray());
}

这是 PHP 部分:

function encryptRC2($datastring, $keystring, $ivstring) {
    $encrypted = mcrypt_encrypt(MCRYPT_RC2, $keystring, $datastring, MCRYPT_MODE_CBC, $ivstring);
    return base64_encode($encrypted);
}

我试图:

  • 强制编码与mb_convert_string()C# 端匹配
  • 更改密码模式(即使 C# 的默认值是 CBC,也没办法)
  • 尝试base64_encode()一个strtoupper()字符串

我无法更改 C# 算法,我需要将相同的结果与 PHP 匹配。

4

0 回答 0