RSAOAEPKeyExchangeFormatter Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vytvoří data o výměně klíčů OAEP (Optimal Asymetric Encryption Odsazení) pomocí RSA.
public ref class RSAOAEPKeyExchangeFormatter : System::Security::Cryptography::AsymmetricKeyExchangeFormatter
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public class RSAOAEPKeyExchangeFormatter : System.Security.Cryptography.AsymmetricKeyExchangeFormatter
public class RSAOAEPKeyExchangeFormatter : System.Security.Cryptography.AsymmetricKeyExchangeFormatter
[System.Runtime.InteropServices.ComVisible(true)]
public class RSAOAEPKeyExchangeFormatter : System.Security.Cryptography.AsymmetricKeyExchangeFormatter
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
type RSAOAEPKeyExchangeFormatter = class
inherit AsymmetricKeyExchangeFormatter
type RSAOAEPKeyExchangeFormatter = class
inherit AsymmetricKeyExchangeFormatter
[<System.Runtime.InteropServices.ComVisible(true)>]
type RSAOAEPKeyExchangeFormatter = class
inherit AsymmetricKeyExchangeFormatter
Public Class RSAOAEPKeyExchangeFormatter
Inherits AsymmetricKeyExchangeFormatter
- Dědičnost
- Atributy
Příklady
Následující příklad ukazuje, jak pomocí RSAOAEPKeyExchangeFormatter třídy vytvořit klíč výměny pro příjemce zprávy.
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
Poznámky
Výměna klíčů umožňuje odesílateli vytvořit tajné informace, například náhodná data, která se dají použít jako klíč v algoritmu symetrického šifrování, a pomocí šifrování je odeslat zamýšlenému příjemci.
Slouží RSAOAEPKeyExchangeDeformatter k přijetí výměny klíčů a extrakci tajných informací z ní.
Upozornění
Důrazně doporučujeme, abyste se nepokoušli vytvořit vlastní metodu výměny klíčů ze základních poskytovaných funkcí, protože mnoho podrobností operace musí být provedeno pečlivě, aby výměna klíčů byla úspěšná.
Konstruktory
RSAOAEPKeyExchangeFormatter() |
Inicializuje novou instanci RSAOAEPKeyExchangeFormatter třídy. |
RSAOAEPKeyExchangeFormatter(AsymmetricAlgorithm) |
Inicializuje novou instanci RSAOAEPKeyExchangeFormatter třídy pomocí zadaného klíče. |
Vlastnosti
Parameter |
Získá nebo nastaví parametr použitý k vytvoření odsazení v procesu vytváření výměny klíčů. |
Parameters |
Získá parametry pro výměnu klíčů OAEP (Optimal Asymmetric Encryption Odsazení). |
Rng |
Získá nebo nastaví algoritmus generátoru náhodných čísel, který se má použít při vytváření výměny klíčů. |
Metody
CreateKeyExchange(Byte[], Type) |
Vytvoří zašifrovaná data výměny klíčů ze zadaných vstupních dat. |
CreateKeyExchange(Byte[]) |
Vytvoří zašifrovaná data výměny klíčů ze zadaných vstupních dat. |
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
GetHashCode() |
Slouží jako výchozí hashovací funkce. (Zděděno od Object) |
GetType() |
Získá aktuální Type instanci. (Zděděno od Object) |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (Zděděno od Object) |
SetKey(AsymmetricAlgorithm) |
Nastaví veřejný klíč, který se má použít k šifrování dat výměny klíčů. |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |