Ler em inglês

Partilhar via


RSAPKCS1KeyExchangeFormatter Classe

Definição

Cria os dados de troca de chaves PKCS #1 usando RSA.

C#
public class RSAPKCS1KeyExchangeFormatter : System.Security.Cryptography.AsymmetricKeyExchangeFormatter
C#
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public class RSAPKCS1KeyExchangeFormatter : System.Security.Cryptography.AsymmetricKeyExchangeFormatter
C#
[System.Runtime.InteropServices.ComVisible(true)]
public class RSAPKCS1KeyExchangeFormatter : System.Security.Cryptography.AsymmetricKeyExchangeFormatter
Herança
RSAPKCS1KeyExchangeFormatter
Atributos

Exemplos

O exemplo a seguir mostra como usar a RSAPKCS1KeyExchangeFormatter classe para criar uma chave de troca para um destinatário da mensagem.

C#
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

class Alice
{
    public static void Main(string[] args)
    {
        using (Bob bob = new Bob())
        {
            using (RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider())
            {
                // Get Bob's public key
                rsaKey.ImportCspBlob(bob.key);
                byte[] encryptedSessionKey = null;
                byte[] encryptedMessage = null;
                byte[] iv = null;
                Send(rsaKey, "Secret message", out iv, out encryptedSessionKey, out encryptedMessage);
                bob.Receive(iv, encryptedSessionKey, encryptedMessage);
            }
        }
    }

    private static void Send(RSA key, string secretMessage, out byte[] iv, out byte[] encryptedSessionKey, out byte[] encryptedMessage)
    {
        using (Aes aes = new AesCryptoServiceProvider())
        {
            iv = aes.IV;

            // Encrypt the session key
            RSAPKCS1KeyExchangeFormatter keyFormatter = new RSAPKCS1KeyExchangeFormatter(key);
            encryptedSessionKey = keyFormatter.CreateKeyExchange(aes.Key, typeof(Aes));

            // Encrypt the message
            using (MemoryStream ciphertext = new MemoryStream())
            using (CryptoStream cs = new CryptoStream(ciphertext, aes.CreateEncryptor(), CryptoStreamMode.Write))
            {
                byte[] plaintextMessage = Encoding.UTF8.GetBytes(secretMessage);
                cs.Write(plaintextMessage, 0, plaintextMessage.Length);
                cs.Close();

                encryptedMessage = ciphertext.ToArray();
            }
        }
    }
}
public class Bob : IDisposable
{
    public byte[] key;
    private RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider();
    public Bob()
    {
        key = rsaKey.ExportCspBlob(false);
    }
    public void Receive(byte[] iv, byte[] encryptedSessionKey, byte[] encryptedMessage)
    {

        using (Aes aes = new AesCryptoServiceProvider())
        {
            aes.IV = iv;

            // Decrypt the session key
            RSAPKCS1KeyExchangeDeformatter keyDeformatter = new RSAPKCS1KeyExchangeDeformatter(rsaKey);
            aes.Key = keyDeformatter.DecryptKeyExchange(encryptedSessionKey);

            // Decrypt the message
            using (MemoryStream plaintext = new MemoryStream())
            using (CryptoStream cs = new CryptoStream(plaintext, aes.CreateDecryptor(), CryptoStreamMode.Write))
            {
                cs.Write(encryptedMessage, 0, encryptedMessage.Length);
                cs.Close();

                string message = Encoding.UTF8.GetString(plaintext.ToArray());
                Console.WriteLine(message);
            }
        }
    }
    public void Dispose()
    {
        rsaKey.Dispose();
    }
}

Comentários

A troca de chaves permite que um remetente crie informações secretas (como dados aleatórios que podem ser usados como uma chave em um algoritmo de criptografia simétrica) e use a criptografia para enviá-la ao destinatário pretendido.

Use RSAPKCS1KeyExchangeDeformatter para receber a troca de chaves e extrair as informações secretas dela.

Atenção

Recomendamos que você não tente criar seu próprio método de troca de chaves com base na funcionalidade básica fornecida, pois muitos detalhes da operação devem ser executados com cuidado para que a troca de chaves seja bem-sucedida.

Construtores

RSAPKCS1KeyExchangeFormatter()

Inicializa uma nova instância da classe RSAPKCS1KeyExchangeFormatter.

RSAPKCS1KeyExchangeFormatter(AsymmetricAlgorithm)

Inicializa uma nova instância da classe RSAPKCS1KeyExchangeFormatter com a chave especificada.

Propriedades

Parameters

Obtém os parâmetros para a troca de chaves PKCS nº 1.

Rng

Obtém ou define o algoritmo do gerador de números aleatórios a ser usado na criação da troca de chaves.

Métodos

CreateKeyExchange(Byte[], Type)

Cria os dados de troca de chaves criptografados usando os dados de entrada especificados.

CreateKeyExchange(Byte[])

Cria os dados de troca de chaves criptografados usando os dados de entrada especificados.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
SetKey(AsymmetricAlgorithm)

Define a chave pública a ser usada para criptografar os dados de troca de chaves.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Produto Versões
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Confira também