title: Difference between results with RSA Encryption with Bouncy Castle in Java and C#
body: <p>I have a Java <strong>working</strong> sample app (which uses Bouncy Castle) that I need to port to C# (I'm using Bouncy Castle for C# too).</p>
  
  <p>The code is almost the same. However, even when I provide exactly the same modulus and exponent for both, the result arrays are completely different also the strings.</p>
  
  <p>Reiterating: The Java excerpt is the code that works</p>
  
  <p>Where do I'm getting wrong? Thank you in advance!</p>
  
  <p><strong>Java:</strong></p>
  
  <pre><code>public static String encodeRSA(String keyModulus, String keyExponent,
          String data) {
      try {
  
          byte btMod[] = Base64.decode(keyModulus);
          byte btExp[] = Base64.decode(keyExponent);
  
          BigInteger modulus = new BigInteger(1, btMod);
          BigInteger pubExp = new BigInteger(1, btExp);
  
          KeyFactory keyFactory = KeyFactory.getInstance("RSA");
          RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(modulus, pubExp);
          RSAPublicKey key = (RSAPublicKey) keyFactory.generatePublic(pubKeySpec);
  
          Cipher cipher = Cipher.getInstance("RSA");
          cipher.init(Cipher.ENCRYPT_MODE, key);
  
          byte[] cipherData = cipher.doFinal(data.getBytes());
          String tmp = new String(Base64.encode(cipherData));
  
          System.out.println(tmp);
  
          return tmp;
      } catch (Exception e) {
          System.out.println(e.getMessage());
      }
      return "";
  }
  </code></pre>
  
  <p><strong>C#:</strong></p>
  
  <pre><code>    private static string EncodeRSA(string modulus, string exponent, string data)
      {
          //Base64, DotNetUtilities functions and BigInteger type are from Bouncy Castle
          byte[] btMod = Base64.Decode(modulus);
          byte[] btExp = Base64.Decode(exponent);
  
          BigInteger mod = new BigInteger(1, btMod);
          BigInteger exp = new BigInteger(1, btExp);
  
          RsaKeyParameters bcKeySpec = new RsaKeyParameters(false, mod, exp);
          RSAParameters keySpec = DotNetUtilities.ToRSAParameters(bcKeySpec);
  
          RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
          rsa.ImportParameters(keySpec);
  
  
          byte[] plaintext = Encoding.UTF8.GetBytes(data);
          byte[] ciphertext = rsa.Encrypt(plaintext, false);
          string cipherresult = Encoding.UTF8.GetString(Base64.Encode(ciphertext));
          return cipherresult;
      }
  </code></pre>
  
  <p><strong>Modulus:</strong></p>
  
  <pre><code>gdBAMJVXCuEGhX0b1hPAggpD7Ayi33JhsARksGkEatQsdox3BG3bTR/vz8M4vZe74EZj0aZrk0rGJGmAEJZ9GlXq6JzIRYBW5zULsBoPDq4spgobECJLsXq8CnZzOrOM+meIXFhoK8Jyob4X9q62HkDwhMMyqsBG0epWMHPIgkU=
  </code></pre>
  
  <p><strong>Exponent:</strong></p>
  
  <pre><code>AQAB
  </code></pre>
  
  <p><strong>Output:</strong></p>
  
  <pre><code>Java output for the entry "1]teste]111111]MTExMTExMTExMTExMTExMQ==" 
  using the given modulus/exponent
  
  dUCVsGrZIwSyh0ZAxon3wMSPPoQqflpRNtQ5c+TILuOR/5IihABJpZRL6E1TjYs62WXvQUbeFqRYbdAvbjY3YZk+aSviBosdN54+T8+/5agjveeDBi6LXu6r1+KBriq2K1ULg9YC62SrSbRN8VMJ9gkgatF2ux06PyouJOPJPN8=
  </code></pre>
  
  <p><strong>EDIT - C# Output with given entry, modulus and exponent</strong></p>
  
  <pre><code>CHyg5J+OMuG9H9S7R24Lg2iXeLN/Rgh7XcyDQJqMNZobH0V1hqe2dxrcE3R+UrVl/aDWJg3aXNtP3+8YFA17fLr9yIbIYv5o2zeRMdHbyrW/z26JGaynsay096KEzJ0uBAACJQ3LZryd5ei7zzo77Bnka2Un7C9TJvldswhldxM=
  </code></pre>