我想将此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。请指教。
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));
... phpseclib直接接受字符串,因此没有任何可转换的地方...实际上,这过于简单了,我认为这很可能在php方面引起问题。我的猜测是
_UNICODE
实际上是utf16-le,虽然解密应该可以成功进行而不会出现任何问题,但是必须明智地解释明文。这完全取决于OP希望对纯文本执行什么操作,而OP显然没有共享该明文。@ PresidentJamesK.Polk-好点。如果他们只想在Web浏览器中输出
header('Content-Type: text/html; charset=utf-16le');
字符,他们就可以这样做,或者,在其他浏览器中,我认为有时会自动检测字符类型,而忽略Content-Type idk大声笑。phpseclib只为您提供字符串中的字节。