RSA Criptografia de grandes dados em C #

Este é o meu primeiro post, por isso espero não ter perdido nada de importante. Estou fazendo um projeto em c # em que preciso usar a criptografia de chave pública / privada para criptografar uma mensagem e enviá-la por uma conexão SS

Escolhi usar oRSACryptoService, conforme a documentação, esse era o único esquema de criptografia assimétrica usado para criptografar dados. O problema é que estou tendo muitos problemas com isso. (Eu queria fazer criptografia simétrica, mas não é isso que meu professor quer que eu faça, e, segundo ele, deve ser fácil determinar o tamanho do bloco e fazer todo o trabalho para você.) Bem, até agora sem sorte e tentei algumas abordagens diferentes, mas agora estou de volta ao básico e tentando novamente, este é o meu código atual:

    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 você pode ver, eu gero as chaves e imito uma PKI enviando a chave pública para uma classe simples que a armazena e, em seguida, a chave privada é gravada em um arquivo (observe que eu também tenho outro método que faz o mesmo mas armazena-o em uma matriz, apenas porque eu queria testar e simplificar as coisas à medida que obtenhoNo such key exceptions e às vezes exceções criptográficas quando eu faço da maneira mostrada no exemplo, então eu queria simplificá-lo simplesmente armazenando orsa.ToXmlString string, como uma string em uma matriz, mas sem sorte.)

gora, eu tenho um método de criptografia e descriptografia, da seguinte maneir

    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;
    }

Decryption:

    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;
    }

Eu sei que isso é uma parede de texto, mas espero que você possa me ajudar, porque eu tenho batido minha cabeça contra a parede por tanto tempo agora que não é engraçado

O problema é: como faço para criptografar mensagens comRSA (ou qualquer outra criptografia de chave pública / privada)

Aqui está o cliente de teste:

    public static void Main(string[] args)
    {
        PublicKeyInfrastructure pki = new PublicKeyInfrastructure();
        Cryptograph crypto = new Cryptograph();
        string[] keys = crypto.GenerateKeysToStrings("[email protected]");


        string plainText = "Hello play with me, please";
        string publicKey = crypto.GetPublicKey("[email protected]");

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


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

    }

Como mencionei, as matrizes de strings estão lá porque eu queria eliminar erros de análise incorreta de documentos XML ...

Quando executo o cliente de teste, se eu usar a chave privada para criptografar e a chave pública para descriptografar, recebo uma "Exceção de chave não existe" e, se eu fizer o contrário, receberei uma exceção de dados incorreto

Por favor, ajudem-me pessoal, se você souber de algum bom guia, ou possam me dizer como implementar um pouco diretamente a criptografia de chave pública / privada em mensagens de string, por favor, ajudem-m

Agradeço qualquer ajuda.

questionAnswers(3)

yourAnswerToTheQuestion