Note that there are some explanatory texts on larger screens.

plurals
  1. PO"Bad Data" when decrypting using RSACryptoProvider from string encrypted in PHP
    text
    copied!<p>I am trying to decrypt a string in C# that was encrypted in PHP using RSA, and for the life of me, I can't get it right. I have condensed the problem to two sample test apps in .NET and PHP: </p> <p>In C#:</p> <pre><code>class Program { static void Main(string[] args) { RSACryptoServiceProvider provider = new RSACryptoServiceProvider(); string fileName = @"C:\privateKey"; if (File.Exists(fileName)) { provider.FromXmlString(File.ReadAllText(fileName)); } else { File.WriteAllText(fileName, provider.ToXmlString(true)); } if(args.Length &gt; 0) { string decrypted = Encoding.UTF8.GetString(provider.Decrypt(Convert.FromBase64String(args[0]), false)); Console.WriteLine("decrypted: {0}", decrypted); } else { Console.WriteLine(provider.ToXmlString(false)); } Console.ReadLine(); } } </code></pre> <p>The first time I run this, it outputs(nicely formatted):</p> <pre><code>&lt;RSAKeyValue&gt; &lt;Modulus&gt; 2P8G+ospDboN87+FIWSzFA9E1QVXCDy4bO9YZPe1MTcxO7VhlBYmLy1J7b rSheaTa8RamrdeXe2Ev0y5O7zyxo/Bxw4W2UfnVAAFK+bgb8f0FicnSosAlGC95m5Goid9wWPf/QtqDa NxSMBBjULA1WKzA7+3HQncAenODYypOiE= &lt;/Modulus&gt; &lt;Exponent&gt;AQAB&lt;/Exponent&gt; &lt;/RSAKeyValue&gt; </code></pre> <p>I have verified that the key gets saved and loaded correctly between runs.</p> <p>Then I do this in PHP using the <a href="http://pear.php.net/package/Crypt_RSA/docs/latest/li_Crypt_RSA.html" rel="nofollow">Crypt_RSA Package</a>:</p> <pre><code>include('Crypt/RSA.php'); $keyXML = &lt;&lt;&lt;EOS &lt;RSAKeyValue&gt; &lt;Modulus&gt;2P8G+ospDboN87+FIWSzFA9E1QVXCDy4bO9YZPe1MTcxO7VhlBYmLy1J7brSheaTa8RamrdeXe2Ev0y5O7zyxo/Bxw4W2UfnVAAFK+bgb8f0FicnSosAlGC95m5Goid9wWPf/QtqDaNxSMBBjULA1WKzA7+3HQncAenODYypOiE=&lt;/Modulus&gt; &lt;Exponent&gt;AQAB&lt;/Exponent&gt; &lt;/RSAKeyValue&gt; EOS; $doc = DOMDocument::loadXML($keyXML); $modulus = $doc-&gt;getElementsByTagName("Modulus")-&gt;item(0)-&gt;nodeValue; $exponent = $doc-&gt;getElementsByTagName("Exponent")-&gt;item(0)-&gt;nodeValue; $key = Crypt_RSA_Key::factory(base64_decode($modulus), base64_decode($exponent), 'public'); $crypt = new Crypt_RSA(); echo $crypt-&gt;encrypt("hello", $key) </code></pre> <p>This outputs my decrypted string:</p> <pre><code>CBGFdK+NXq39ZigXkW6JChHHCCUTzHzjsEPqdoaNJtZgTCRQfIIR6IU4m5LOHGidLaLWN7cIM9ImNdSsAsMH9awkZ7uW0KXdqQjhVGeXzmC6EuSHqrSzYiIZp+1F5Rxhg/JFD/Or3eQ+UIHm/4YtNTyys6S3maClitk5KV68lhs= </code></pre> <p>Finally, when I run my C# app again with this as input, I get the following exception when I call the Decrypt method:</p> <pre><code>System.Security.Cryptography.CryptographicException was unhandled Message=Bad Data. Source=mscorlib StackTrace: at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr) at System.Security.Cryptography.RSACryptoServiceProvider.DecryptKey(SafeKeyHandle pKeyContext, Byte[] pbEncryptedKey, Int32 cbEncryptedKey, Boolean fOAEP, ObjectHandleOnStack ohRetDecryptedKey) at System.Security.Cryptography.RSACryptoServiceProvider.Decrypt(Byte[] rgb, Boolean fOAEP) at ConsoleApplication1.Program.Main(String[] args) in C:\development\FundCentric\src\Utilities\ConsoleApplication1\ConsoleApplication1\Program.cs:line 27 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException: </code></pre> <p>Frankly, I'm at a point where I don't know what else I can try anymore. Any suggestions at what could be possibly going wrong or what else I could try would be very welcome.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload