RSAOAEPKeyExchangeFormatter Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
kullanarak RSAEn uygun Asimetrik Şifreleme Doldurma (OAEP) anahtar değişimi verilerini oluşturur.
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
- Devralma
- Öznitelikler
Örnekler
Aşağıdaki örnekte, ileti alıcısı RSAOAEPKeyExchangeFormatter için exchange anahtarı oluşturmak üzere sınıfının nasıl kullanılacağı gösterilmektedir.
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
Açıklamalar
Anahtar değişimi, gönderenin simetrik şifreleme algoritmasında anahtar olarak kullanılabilecek rastgele veriler gibi gizli dizi bilgileri oluşturmasına ve bunu istenen alıcıya göndermek için şifreleme kullanmasına olanak tanır.
Anahtar değişimini almak ve ondan gizli dizi bilgilerini ayıklamak için kullanın RSAOAEPKeyExchangeDeformatter .
Dikkat
Anahtar değişiminin başarılı olması için işlemin birçok ayrıntısının dikkatli bir şekilde gerçekleştirilmesi gerektiğinden, sağlanan temel işlevsellikten kendi anahtar değişimi yönteminizi oluşturmaya çalışmamanızı kesinlikle öneririz.
Oluşturucular
RSAOAEPKeyExchangeFormatter() |
RSAOAEPKeyExchangeFormatter sınıfının yeni bir örneğini başlatır. |
RSAOAEPKeyExchangeFormatter(AsymmetricAlgorithm) |
Belirtilen anahtarla sınıfının yeni bir örneğini RSAOAEPKeyExchangeFormatter başlatır. |
Özellikler
Parameter |
Anahtar değişimi oluşturma işleminde doldurma oluşturmak için kullanılan parametreyi alır veya ayarlar. |
Parameters |
Optimal Asimetrik Şifreleme Doldurma (OAEP) anahtar değişimi parametrelerini alır. |
Rng |
Anahtar değişiminin oluşturulmasında kullanılacak rastgele sayı oluşturucu algoritmasını alır veya ayarlar. |
Yöntemler
CreateKeyExchange(Byte[], Type) |
Belirtilen giriş verilerinden şifrelenmiş anahtar değişimi verilerini oluşturur. |
CreateKeyExchange(Byte[]) |
Belirtilen giriş verilerinden şifrelenmiş anahtar değişimi verilerini oluşturur. |
Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
GetType() |
Type Geçerli örneğini alır. (Devralındığı yer: Object) |
MemberwiseClone() |
Geçerli Objectöğesinin sığ bir kopyasını oluşturur. (Devralındığı yer: Object) |
SetKey(AsymmetricAlgorithm) |
Anahtar değişim verilerini şifrelemek için kullanılacak ortak anahtarı ayarlar. |
ToString() |
Geçerli nesneyi temsil eden dizeyi döndürür. (Devralındığı yer: Object) |