RSAPKCS1KeyExchangeDeformatter Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Dekrypterar PKCS #1-nyckelutbytesdata.
public ref class RSAPKCS1KeyExchangeDeformatter : System::Security::Cryptography::AsymmetricKeyExchangeDeformatter
public class RSAPKCS1KeyExchangeDeformatter : System.Security.Cryptography.AsymmetricKeyExchangeDeformatter
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public class RSAPKCS1KeyExchangeDeformatter : System.Security.Cryptography.AsymmetricKeyExchangeDeformatter
[System.Runtime.InteropServices.ComVisible(true)]
public class RSAPKCS1KeyExchangeDeformatter : System.Security.Cryptography.AsymmetricKeyExchangeDeformatter
type RSAPKCS1KeyExchangeDeformatter = class
inherit AsymmetricKeyExchangeDeformatter
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
type RSAPKCS1KeyExchangeDeformatter = class
inherit AsymmetricKeyExchangeDeformatter
[<System.Runtime.InteropServices.ComVisible(true)>]
type RSAPKCS1KeyExchangeDeformatter = class
inherit AsymmetricKeyExchangeDeformatter
Public Class RSAPKCS1KeyExchangeDeformatter
Inherits AsymmetricKeyExchangeDeformatter
- Arv
- Attribut
Exempel
I följande exempel visas hur du använder RSAPKCS1KeyExchangeDeformatter klassen för att återskapa en exchange-nyckel som ska användas för att dekryptera ett meddelande.
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();
}
}
Imports System.IO
Imports System.Security.Cryptography
Imports System.Text
Class Alice
Public Shared Sub Main(ByVal args() As String)
Dim bob As New Bob()
Try
Dim rsaKey As New RSACryptoServiceProvider()
Try
' 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)
Finally
rsaKey.Dispose()
End Try
Finally
bob.Dispose()
End Try
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)
Dim aes = New AesCryptoServiceProvider()
Try
iv = aes.IV
' Encrypt the session key
Dim keyFormatter As New RSAPKCS1KeyExchangeFormatter(key)
encryptedSessionKey = keyFormatter.CreateKeyExchange(aes.Key, GetType(Aes))
' Encrypt the message
Dim ciphertext As New MemoryStream()
Try
Dim cs As New CryptoStream(ciphertext, aes.CreateEncryptor(), CryptoStreamMode.Write)
Try
Dim plaintextMessage As Byte() = Encoding.UTF8.GetBytes(secretMessage)
cs.Write(plaintextMessage, 0, plaintextMessage.Length)
cs.Close()
encryptedMessage = ciphertext.ToArray()
Finally
cs.Dispose()
End Try
Finally
ciphertext.Dispose()
End Try
Finally
aes.Dispose()
End Try
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)
Dim aes = New AesCryptoServiceProvider()
Try
aes.IV = iv
' Decrypt the session key
Dim keyDeformatter As New RSAPKCS1KeyExchangeDeformatter(rsaKey)
aes.Key = keyDeformatter.DecryptKeyExchange(encryptedSessionKey)
' Decrypt the message
Dim plaintext As New MemoryStream()
Try
Dim cs As New CryptoStream(plaintext, aes.CreateDecryptor(), CryptoStreamMode.Write)
Try
cs.Write(encryptedMessage, 0, encryptedMessage.Length)
cs.Close()
Dim message As String = Encoding.UTF8.GetString(plaintext.ToArray())
Console.WriteLine(message)
Finally
cs.Dispose()
End Try
Finally
plaintext.Dispose()
End Try
Finally
aes.Dispose()
End Try
End Sub
Public Overloads Sub Dispose() Implements IDisposable.Dispose
rsaKey.Dispose()
End Sub
End Class
Kommentarer
Med nyckelutbyte kan en avsändare skapa hemlig information (till exempel slumpmässiga data som kan användas som en nyckel i en symmetrisk krypteringsalgoritm) och använda kryptering för att skicka den till den avsedda mottagaren.
Använd RSAPKCS1KeyExchangeFormatter för att skapa nyckelutbytesmeddelandet med hjälp av algoritmen RSA .
Caution
Vi rekommenderar starkt att du inte försöker skapa en egen nyckelutbytesmetod från de grundläggande funktioner som tillhandahålls, eftersom många detaljer om åtgärden måste utföras noggrant för att nyckelutbytet ska lyckas.
Konstruktorer
| Name | Description |
|---|---|
| RSAPKCS1KeyExchangeDeformatter() |
Initierar en ny instans av RSAPKCS1KeyExchangeDeformatter klassen. |
| RSAPKCS1KeyExchangeDeformatter(AsymmetricAlgorithm) |
Initierar en ny instans av RSAPKCS1KeyExchangeDeformatter klassen med den angivna nyckeln. |
Egenskaper
| Name | Description |
|---|---|
| Parameters |
Hämtar parametrarna för PKCS #1-nyckelutbytet. |
| RNG |
Hämtar eller anger den slumptalsgeneratoralgoritm som ska användas när nyckelutbytet skapas. |
Metoder
| Name | Description |
|---|---|
| DecryptKeyExchange(Byte[]) |
Extraherar hemlig information från krypterade nyckelutbytesdata. |
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| SetKey(AsymmetricAlgorithm) |
Anger den privata nyckel som ska användas för att dekryptera den hemliga informationen. |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |