RSA Cifrado de datos grandes en C #

Esta es mi primera publicación, así que espero no haberme perdido nada importante. Estoy haciendo un proyecto en C # donde necesito usar el cifrado de clave pública / privada para cifrar un mensaje y luego enviarlo a través de una conexión SSL.

Elegí usar laRSACryptoService, según la documentación, ese era el único esquema de cifrado asimétrico utilizado para cifrar datos. El problema es que estoy teniendo muchos problemas con esto. (Quería hacer cifrado simétrico, pero eso no es lo que mi maestro quiere que haga, y según él, debería ser fácil determinar un tamaño de bloque y luego debería hacer todo el trabajo por usted). Bueno, hasta ahora no tuve suerte y probé algunos enfoques diferentes, pero ahora vuelvo a lo básico y lo intento nuevamente, este es mi código actual:

    public string[] GenerateKeysToStrings(string uniqueIdentifier)
    {
        string[] keys;
        using (var rsa = new RSACryptoServiceProvider(4096))
        {
            try
            {
                string privateKey = rsa.ToXmlString(true);
                string publicKey = rsa.ToXmlString(false);

                this.pki.StoreKey(publicKey, uniqueIdentifier);

                keys = new string[2];
                keys[0] = privateKey;
                keys[1] = publicKey;
            }
            finally
            {
                //// Clear the RSA key container, deleting generated keys.
                rsa.PersistKeyInCsp = false;
            }
        }
        return keys;
    }

Como puede ver, genero las claves e imito una PKI enviando la clave pública a una clase simple que la almacena, y luego la clave privada se escribe en un archivo (tenga en cuenta que también tengo otro método que hace lo mismo pero lo almacena en una matriz, solo porque quería probar y simplificar las cosas a medida que obtengoNo such key exceptions y, a veces, excepciones criptográficas cuando lo hago de la manera que se muestra en el ejemplo, por lo que quería simplificarlo simplemente almacenando elrsa.ToXmlString string, como una cadena en una matriz, pero sin suerte.)

Ahora tengo un método de cifrado y descifrado de la siguiente manera:

    public string Encrypt(string keyString, string message)
    {
        string encryptedMessage;
        using (var rsa = new RSACryptoServiceProvider())
        {
            try
            {
                //// Load the key from the specified path
                var encryptKey = new XmlDocument();
                encryptKey.Load(@"C:\Test\PrivateKeyInfo.xml");
                rsa.FromXmlString(encryptKey.OuterXml);


                //// Conver the string message to a byte array for encryption
                //// var encoder = new UTF8Encoding();
                ASCIIEncoding byteConverter = new ASCIIEncoding();
                byte[] dataToEncrypt = byteConverter.GetBytes(message);

                byte[] encryptedData = rsa.Encrypt(dataToEncrypt, false);

                //// Convert the byte array back to a string message
                encryptedMessage = byteConverter.GetString(encryptedData);
            }
            finally
            {
                //// Clear the RSA key container, deleting generated keys.
                rsa.PersistKeyInCsp = false;
            }
        }
        return encryptedMessage;
    }

Descifrado:

    public string Decrypt(string keyString, string message)
    {
        string decryptedText;
        using (var rsa = new RSACryptoServiceProvider())
        {
            try
            {
                //// Loads the keyinfo into the rsa parameters from the keyfile
                /*
                var privateKey = new XmlDocument();
                privateKey.Load(keyString);
                 */
                rsa.FromXmlString(keyString);

                //// Convert the text from string to byte array for decryption
                ASCIIEncoding byteConverter = new ASCIIEncoding();
                var encryptedBytes = byteConverter.GetBytes(message);

                //// Create an aux array to store all the encrypted bytes
                byte[] decryptedBytes = rsa.Decrypt(encryptedBytes, false);

                decryptedText = byteConverter.GetString(decryptedBytes);
            }
            finally
            {
                //// Clear the RSA key container, deleting generated keys.
                rsa.PersistKeyInCsp = false;
            }
        }
        return decryptedText;
    }

Sé que este es un muro de texto, pero espero que me puedan ayudar porque he estado golpeando mi cabeza contra la pared por mucho tiempo, ahora no es gracioso

El problema es, ¿cómo hago para cifrar mensajes conRSA (o cualquier otro cifrado de clave pública / privada)

Aquí está el cliente de prueba:

    public static void Main(string[] args)
    {
        PublicKeyInfrastructure pki = new PublicKeyInfrastructure();
        Cryptograph crypto = new Cryptograph();
        string[] keys = crypto.GenerateKeysToStrings("simonlanghoff@gmail.com");


        string plainText = "Hello play with me, please";
        string publicKey = crypto.GetPublicKey("simonlanghoff@gmail.com");

        string encryptedText = crypto.Encrypt(keys[0], plainText);


        string decryptedText = crypto.Decrypt(keys[1], encryptedText);

    }

Como mencioné, las matrices de cadenas están ahí porque quería eliminar el error de análisis incorrecto de los documentos XML ...

Cuando ejecuto el cliente de prueba, si uso la clave privada para cifrar y la clave pública para descifrar, obtengo una "Excepción de clave no existe" y si lo hago al revés, obtengo una excepción de datos erróneos.

Por favor, ayúdenme, muchachos, si conocen alguna buena guía, o pueden decirme cómo implementar de alguna manera la encriptación de clave pública / privada en los mensajes de cadena, por favor ayudenme.

Agradezco cualquier ayuda.