RSAOAEPKeyExchangeDeformatter Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Descifra datos de intercambio de claves de Relleno óptimo de cifrado asimétrico (Optimal Asymmetric Encryption Padding, OAEP).
public ref class RSAOAEPKeyExchangeDeformatter : System::Security::Cryptography::AsymmetricKeyExchangeDeformatter
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public class RSAOAEPKeyExchangeDeformatter : System.Security.Cryptography.AsymmetricKeyExchangeDeformatter
public class RSAOAEPKeyExchangeDeformatter : System.Security.Cryptography.AsymmetricKeyExchangeDeformatter
[System.Runtime.InteropServices.ComVisible(true)]
public class RSAOAEPKeyExchangeDeformatter : System.Security.Cryptography.AsymmetricKeyExchangeDeformatter
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
type RSAOAEPKeyExchangeDeformatter = class
inherit AsymmetricKeyExchangeDeformatter
type RSAOAEPKeyExchangeDeformatter = class
inherit AsymmetricKeyExchangeDeformatter
[<System.Runtime.InteropServices.ComVisible(true)>]
type RSAOAEPKeyExchangeDeformatter = class
inherit AsymmetricKeyExchangeDeformatter
Public Class RSAOAEPKeyExchangeDeformatter
Inherits AsymmetricKeyExchangeDeformatter
- Herencia
- Atributos
Ejemplos
En el ejemplo siguiente se muestra cómo usar la RSAOAEPKeyExchangeDeformatter clase para volver a crear una clave de intercambio que se usará para descifrar un mensaje.
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
RSAOAEPKeyExchangeFormatter keyFormatter = new RSAOAEPKeyExchangeFormatter(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
RSAOAEPKeyExchangeDeformatter keyDeformatter = new RSAOAEPKeyExchangeDeformatter(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();
}
}
Imports System.IO
Imports System.Security.Cryptography
Imports System.Text
Class Alice
Public Shared Sub Main(ByVal args() As String)
Using bob As New Bob()
Using rsaKey As New RSACryptoServiceProvider()
' Get Bob's public key
rsaKey.ImportCspBlob(bob.key)
Dim encryptedSessionKey As Byte() = Nothing
Dim encryptedMessage As Byte() = Nothing
Dim iv As Byte() = Nothing
Send(rsaKey, "Secret message", iv, encryptedSessionKey, encryptedMessage)
bob.Receive(iv, encryptedSessionKey, encryptedMessage)
End Using
End Using
End Sub
Private Shared Sub Send(ByVal key As RSA, ByVal secretMessage As String, ByRef iv() As Byte, ByRef encryptedSessionKey() As Byte, ByRef encryptedMessage() As Byte)
Using aes = New AesCryptoServiceProvider()
iv = aes.IV
' Encrypt the session key
Dim keyFormatter As New RSAOAEPKeyExchangeFormatter(key)
encryptedSessionKey = keyFormatter.CreateKeyExchange(aes.Key, GetType(Aes))
' Encrypt the message
Using ciphertext As New MemoryStream()
Using cs As New CryptoStream(ciphertext, aes.CreateEncryptor(), CryptoStreamMode.Write)
Dim plaintextMessage As Byte() = Encoding.UTF8.GetBytes(secretMessage)
cs.Write(plaintextMessage, 0, plaintextMessage.Length)
cs.Close()
encryptedMessage = ciphertext.ToArray()
End Using
End Using
End Using
End Sub
End Class
Public Class Bob
Implements IDisposable
Public key() As Byte
Private rsaKey As New RSACryptoServiceProvider()
Public Sub New()
key = rsaKey.ExportCspBlob(False)
End Sub
Public Sub Receive(ByVal iv() As Byte, ByVal encryptedSessionKey() As Byte, ByVal encryptedMessage() As Byte)
Using aes = New AesCryptoServiceProvider()
aes.IV = iv
' Decrypt the session key
Dim keyDeformatter As New RSAOAEPKeyExchangeDeformatter(rsaKey)
aes.Key = keyDeformatter.DecryptKeyExchange(encryptedSessionKey)
' Decrypt the message
Using plaintext As New MemoryStream()
Using cs As New CryptoStream(plaintext, aes.CreateDecryptor(), CryptoStreamMode.Write)
cs.Write(encryptedMessage, 0, encryptedMessage.Length)
cs.Close()
Dim message As String = Encoding.UTF8.GetString(plaintext.ToArray())
Console.WriteLine(message)
End Using
End Using
End Using
End Sub
Public Overloads Sub Dispose() Implements IDisposable.Dispose
rsaKey.Dispose()
End Sub
End Class
Comentarios
El intercambio de claves permite a un remitente crear información secreta, por ejemplo, datos aleatorios que se pueden usar como clave en un algoritmo de cifrado simétrico y usar el cifrado para enviarlo al destinatario previsto.
Use RSAOAEPKeyExchangeFormatter para crear el mensaje de intercambio de claves con el RSA algoritmo .
Precaución
Se recomienda encarecidamente que no intente crear su propio método de intercambio de claves a partir de la funcionalidad básica proporcionada, ya que muchos detalles de la operación deben realizarse cuidadosamente para que el intercambio de claves sea correcto.
Constructores
RSAOAEPKeyExchangeDeformatter() |
Inicializa una nueva instancia de la clase RSAOAEPKeyExchangeDeformatter. |
RSAOAEPKeyExchangeDeformatter(AsymmetricAlgorithm) |
Inicializa una nueva instancia de la clase RSAOAEPKeyExchangeDeformatter con la clave especificada. |
Propiedades
Parameters |
Obtiene los parámetros del intercambio de claves de Relleno óptimo de cifrado asimétrico (OAEP). |
Métodos
DecryptKeyExchange(Byte[]) |
Extrae información secreta de los datos cifrados de intercambio de claves. |
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
SetKey(AsymmetricAlgorithm) |
Establece la clave privada para descifrar la información secreta. |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |