Warm tip: This article is reproduced from serverfault.com, please click

其他-怎么把C#RSA转换成PHP?

(其他 - How to convert C# RSA to php?)

发布于 2020-12-08 22:31:23

我想将此C#转换为php以使用phpseclib RSA加密?这是C#:

public static string Encrypt(string data)
{
    CspParameters cs = new CspParameters();
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
    rsa.FromXmlString("Key Goes here");
    var dataToEncrypt = _UNICODE.GetBytes(data);
    var encryptedByteArray = rsa.Encrypt(dataToEncrypt, false).ToArray();
    return Convert.ToBase64String(encryptedByteArray);
}

并且我想使用带有RSA的phpseclib将其转换为php,如下所示:http ://phpseclib.sourceforge.net/rsa/examples.html#encrypt,enc2

但我不知道C#,我不知道该怎么做_UNICODE.GetBytes(data),并 rsa.Encrypt(dataToEncrypt, false).ToArray()把它们转换成PHP。请指教。

Questioner
user6774350
Viewed
1
neubert 2020-12-09 09:11:58

var dataToEncrypt = _UNICODE.GetBytes(data);将字符串转换为字节数组。phpseclib直接接受字符串,因此没有任何要转换的地方。

至于rsa.Encrypt(dataToEncrypt, false).ToArray()...每个Encrypt(Byte [],Boolean),第二个参数是fOAEP,因此描述如下:

true使用OAEP填充执行直接RSA加密(仅在运行Windows XP或更高版本的计算机上可用);否则,false请使用PKCS#1 v1.5填充

它返回一个字节数组(byte[]),所以运行输出.ToArray()看起来有点奇怪,但无论如何。

无论如何,基于所有这些,我认为这应该可以解决问题:

$rsa = new RSA;
$rsa->loadKey("Key Goes here");
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
echo base64_encode($rsa->encrypt($data));