title: C# Signing and verifying signatures with RSA. Encoding issue
body: <p>My question is pretty similar to the one form 2011, <a href="https://stackoverflow.com/questions/8437288/signing-and-verifying-signatures-with-rsa-c-sharp">Signing and verifying signatures with RSA C#</a>. Nevertheless, I also get false when I compare the signed data and the original message. Please point on my mistake.</p>
  
  <p>Code:</p>
  
  <pre><code> public static void Main(string[] args)
      {            
  
          //Generate a public/private key pair.  
          RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
  
          //Save the public key information to an RSAParameters structure.
          RSAParameters RSAPublicKeyInfo = RSA.ExportParameters(false);
          RSAParameters RSAPrivateKeyInfo = RSA.ExportParameters(true);    
  
          string message = "2017-04-10T09:37:35.351Z";
  
          string signedMessage = SignData(message, RSAPrivateKeyInfo);
  
          bool success = VerifyData(message, signedMessage, RSAPublicKeyInfo);
  
          Console.WriteLine($"success {success}");
  
          Console.ReadLine();
      }   
  </code></pre>
  
  <p>Signing method:</p>
  
  <pre><code> public static string SignData(string message, RSAParameters privateKey)
      {
          ASCIIEncoding byteConverter = new ASCIIEncoding();
  
          byte[] signedBytes;
  
          using (var rsa = new RSACryptoServiceProvider())
          {
              // Write the message to a byte array using ASCII as the encoding.
              byte[] originalData = byteConverter.GetBytes(message);                
  
              try
              {
                  // Import the private key used for signing the message
                  rsa.ImportParameters(privateKey);
  
                  // Sign the data, using SHA512 as the hashing algorithm 
                  signedBytes = rsa.SignData(originalData, CryptoConfig.MapNameToOID("SHA512"));
              }
              catch (CryptographicException e)
              {
                  Console.WriteLine(e.Message);
                  return null;
              }
              finally
              {
                  // Set the keycontainer to be cleared when rsa is garbage collected.
                  rsa.PersistKeyInCsp = false;
              }
          }
          // Convert the byte array back to a string message
          return byteConverter.GetString(signedBytes);
      }
  </code></pre>
  
  <p>Verification method:</p>
  
  <pre><code>public static bool VerifyData(string originalMessage, string signedMessage, RSAParameters publicKey)
      {
          bool success = false;
          using (var rsa = new RSACryptoServiceProvider())
          {
              ASCIIEncoding byteConverter = new ASCIIEncoding();
  
              byte[] bytesToVerify = byteConverter.GetBytes(originalMessage);
              byte[] signedBytes = byteConverter.GetBytes(signedMessage);
  
              try
              {
                  rsa.ImportParameters(publicKey);
  
                  success = rsa.VerifyData(bytesToVerify, CryptoConfig.MapNameToOID("SHA512"), signedBytes);
              }
              catch (CryptographicException e)
              {
                  Console.WriteLine(e.Message);
              }
              finally
              {
                  rsa.PersistKeyInCsp = false;
              }
          }
          return success;
      }
  </code></pre>
  
  <p>Basically the problem is with string to byte[] encoding. I get the same problem with ASCIIEncoding and with UTF8Encoding.</p>
  
  <p>Thank you in advance!</p>