C# C RSACryptoServiceProvider.Encrypt有一个与PHP函数等价的函数

C# C RSACryptoServiceProvider.Encrypt有一个与PHP函数等价的函数,c#,php,asp.net,encryption,rsa,C#,Php,Asp.net,Encryption,Rsa,我已经指定将一些C代码转换为PHP。我真的不懂C或任何微软编程语言。我需要使用RSA加密连接到web服务,他们提供了公钥和用C编写的示例代码,我需要转换这些代码。下面是C代码: //SAMPLE data to encrypt var data = "dfsdfpamf12031ad"; var flStr = "<BitStrength>1024</BitStrength><RSAKeyValue><Modulus>** some keys *

我已经指定将一些C代码转换为PHP。我真的不懂C或任何微软编程语言。我需要使用RSA加密连接到web服务,他们提供了公钥和用C编写的示例代码,我需要转换这些代码。下面是C代码:

//SAMPLE data to encrypt
var data = "dfsdfpamf12031ad";

var flStr = "<BitStrength>1024</BitStrength><RSAKeyValue><Modulus>** some keys **</Modulus><Exponent>**exponent value **</Exponent></RSAKeyValue>";

var bitStr = flStr.Substring(0, flStr.IndexOf("</BitStrength>", StringComparison.InvariantCultureIgnoreCase) + 14); 

flStr = flStr.Replace(bitStr, "");
var bitStrength = Convert.ToInt32(bitStr.Replace("<BitStrength>", "").Replace("</BitStrength>", ""));
using (var rsaCrypto = new rsaCrypto(bitStrength))
{
    rsaCrypto.FromXmlString(flStr);
    var keySize = bitStrength / 8;
    var bytes = Encoding.UTF32.GetBytes(data);
    var maxLength = keySize - 42;
    var dataLength = bytes.Length;
    var iterations = dataLength / maxLength;
    var returnStr = new returnStr();
    for (var i = 0; i <= iterations; i++)
    {
        var tempBytes = new byte[(dataLength - maxLength * i > maxLength) ? maxLength : dataLength - maxLength * i]; // **i=0 ~ 86; i=1 ~ 42;** 
        Buffer.BlockCopy(bytes, maxLength * i, tempBytes, 0, tempBytes.Length);
        var encryptedBytes = rsaCrypto.Encrypt(tempBytes, true);
        returnStr.Append(Convert.ToBase64String(encryptedBytes));
    }
    return returnStr.ToString();
}
我不认为PHP中是否有RSA字节加密。我相信PHP没有字节数据类型。我尝试使用openssl_public_encrypt函数和phpseclib库,但我认为86和42在加密时会认为它是整数数据类型,而不是字节


我将感谢您对这个问题的任何意见。提前谢谢!:

你能用好的密码替换C代码吗?将消息拆分为块,然后使用RSA独立加密不是一个好主意。代码的其余部分也是相当不错的WTF。我们真的希望我们可以做到这一点,但这是一个现有的客户端代码。我们需要基于他们现有的API提供支持。他们以这种方式加密和解密,所以我们需要遵循他们的方法。至于我们的任务,我们需要使用PHP对其进行加密。我希望仍然有办法做到这一点谢谢你的回复。