title: php data encrypted with openssl_seal. How to decode in c#?
body: <p>I am passing some data (1-2MB) between a php app and a c# program. The info needs to be encrypted and I was using a Rijndael encryption, but encryption was very slow. I am trying to switch to openssl_seal on the php side and have that working fine:</p>
  <h3>PHP CODE</h3>
  <pre><code>&lt;!-- language: lang-php --&gt;
      str = 123;
      $fp = fopen(&quot;/home/prod/publickey.pem&quot;, &quot;r&quot;);
      $cert = fread($fp, 8192);
      fclose($fp);
      $pk1 = openssl_get_publickey($cert);
      openssl_seal($str, $sealed, $ekeys, array($pk1));
      openssl_free_key($pk1);
      
      $sealed = base64_encode($sealed);
      $Xevk = base64_encode($ekeys[0]);
      
      echo $Xevk.&quot;\n\n\n&quot;.$sealed;
  </code></pre>
  <p>But I am having issues trying to decrypt on the c# end.</p>
  <h3>C# Code</h3>
  <pre><code>&lt;!-- language: c# --&gt;
      public static string DecryptSSL(string str) {
          string[] strs = System.Text.RegularExpressions.Regex.Split(str, &quot;\n\n\n&quot;);
          X509Certificate2 myCert2 = null;
          RSACryptoServiceProvider rsa = null;
  
          try {
              myCert2 = new X509Certificate2(Properties.Resources.mycertkey, &quot;&quot;);
              rsa = (RSACryptoServiceProvider)myCert2.PrivateKey;
          } catch(Exception e) {
              Console.WriteLine(e.Message); 
          }
  
          byte[] xkey = rsa.Decrypt(Convert.FromBase64String(strs[0]), false);
  
          byte[] content = Convert.FromBase64String(strs[1]);
          EncDec.RC4(ref content, xkey);
  
          return System.Convert.ToBase64String(content);
      }
  
      public static void RC4(ref Byte[] bytes, Byte[] key) {
          Byte[] s = new Byte[256];
          Byte[] k = new Byte[256];
          Byte temp;
          int i, j;
  
          for(i = 0; i &lt; 256; i++) {
              s[i] = (Byte)i;
              k[i] = key[i % key.GetLength(0)];
          }
  
          j = 0;
          for(i = 0; i &lt; 256; i++) {
              j = (j + s[i] + k[i]) % 256;
              temp = s[i];
              s[i] = s[j];
              s[j] = temp;
          }
  
          i = j = 0;
          for(int x = 0; x &lt; bytes.GetLength(0); x++) {
              i = (i + 1) % 256;
              j = (j + s[i]) % 256;
              temp = s[i];
              s[i] = s[j];
              s[j] = temp;
              int t = (s[i] + s[j]) % 256;
              bytes[x] ^= s[t];
          }
      }
  </code></pre>
  <p>Where DecryptSSL is being called with an ascii string containing the response from the php page.</p>
  <p>I never get the original string, '123' in this case, returned from the decrypt function. What else am I missing?</p>