我已经指定将一些C#代码转换为PHP。我真的不懂C#或任何Microsoft编程语言。我需要连接到具有 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
在加密时会认为它是整数数据类型而不是字节。
我会很感激有关此问题的任何意见。提前致谢! :)