如何解密在C#中使用RSA加密的文本

时间:2013-06-04 18:39:43

标签: c# php rsa phpseclib

我需要将代码从C#转换为PHP,结果相同。 在C#中我很快就完成了,但现在需要将以下代码转换为php:

public static string RsaDecrypt(string privateKey, string src)
{
    CspParameters csp = new CspParameters();
    csp.Flags = CspProviderFlags.UseMachineKeyStore;
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);
    rsa.FromXmlString(privateKey);
    return RsaDecrypt(rsa, src);
}

public static string RsaDecrypt(RSACryptoServiceProvider rsa, string src)
{
    byte[] srcData = Convert.FromBase64String(src);
    byte[] destData = rsa.Decrypt(srcData, false);
    return Encoding.UTF8.GetString(destData);
}

我尝试了几个小时而我不能,我正在使用phpseclib0.2.1a文件和代码:

Pastebin

PHP中的问题返回以下错误:

  

注意:第1582行E:\ AppServWWW \ Request \ Flash \ Crypt \ RSA.php中的解密错误

@EDIT :我的$ _GET [" p"]是

  

cwQPQLSW%2FQ70AUmBzkZ9c7d9MrEAcPAAN1lRG937XZuibDOE304i8894uowlC1OANnWEim6suOxzhEHZl0BR1G1audk4CWG1TUSqAo4MO5FBfVbmcLVMx1KPV9%2FeMzil%2BHM1XwyX3Dm0h%2F0uAxORfpa3waq0iOemkUYBq2lXDEU%3D

1 个答案:

答案 0 :(得分:0)

最新版本的phpseclib是0.3.1所以,首先,我建议您升级。

第二......默认情况下,phpseclib执行OAEP填充。默认情况下,C#可能正在进行PKCS1填充。因此,在使用PHP进行实际解密之前,您需要执行$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);