CryptoStream Klas

Definitie

Definieert een stroom die gegevensstromen koppelt aan cryptografische transformaties.

public ref class CryptoStream : System::IO::Stream
public ref class CryptoStream : System::IO::Stream, IDisposable
public class CryptoStream : System.IO.Stream
[System.Runtime.InteropServices.ComVisible(true)]
public class CryptoStream : System.IO.Stream
public class CryptoStream : System.IO.Stream, IDisposable
type CryptoStream = class
    inherit Stream
    interface IDisposable
[<System.Runtime.InteropServices.ComVisible(true)>]
type CryptoStream = class
    inherit Stream
    interface IDisposable
Public Class CryptoStream
Inherits Stream
Public Class CryptoStream
Inherits Stream
Implements IDisposable
Overname
CryptoStream
Overname
Kenmerken
Implementeringen

Voorbeelden

In het volgende voorbeeld ziet u hoe u een CryptoStream tekenreeks gebruikt om een tekenreeks te versleutelen. Deze methode gebruikt de Aes klasse met de opgegeven Key en initialisatievector (IV).

using System;
using System.IO;
using System.Security.Cryptography;

class AesExample
{
    public static void Main()
    {
        try
        {
            string original = "Here is some data to encrypt!";

            // Create a new instance of the Aes class.
            // This generates a new key and initialization vector (IV).
            using (Aes myAes = Aes.Create())
            {
                // Encrypt the string to an array of bytes.
                byte[] encrypted = EncryptStringToBytes(original, myAes.Key, myAes.IV);

                // Decrypt the bytes to a string.
                string roundtrip = DecryptStringFromBytes(encrypted, myAes.Key, myAes.IV);

                // Display the original data and the decrypted data.
                Console.WriteLine("Original:   {0}", original);
                Console.WriteLine("Round trip: {0}", roundtrip);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Error: {0}", e.Message);
        }
    }

    static byte[] EncryptStringToBytes(string plainText, byte[] Key, byte[] IV)
    {
        // Check arguments.
        if (plainText == null || plainText.Length <= 0)
            throw new ArgumentNullException(nameof(plainText));
        if (Key == null || Key.Length <= 0)
            throw new ArgumentNullException(nameof(Key));
        if (IV == null || IV.Length <= 0)
            throw new ArgumentNullException(nameof(IV));
        byte[] encrypted;

        // Create a Aes object with the specified key and IV.
        using (Aes aesAlg = Aes.Create())
        {
            aesAlg.Key = Key;
            aesAlg.IV = IV;

            // Create an encryptor to perform the stream transform.
            ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

            // Create the streams used for encryption.
            using (MemoryStream msEncrypt = new())
            {
                using (CryptoStream csEncrypt = new(msEncrypt, encryptor, CryptoStreamMode.Write))
                {
                    using (StreamWriter swEncrypt = new(csEncrypt))
                    {
                        // Write all data to the stream.
                        swEncrypt.Write(plainText);
                    }
                    encrypted = msEncrypt.ToArray();
                }
            }
        }

        // Return the encrypted bytes from the memory stream.
        return encrypted;
    }

    static string DecryptStringFromBytes(byte[] cipherText, byte[] Key, byte[] IV)
    {
        // Check arguments.
        if (cipherText == null || cipherText.Length <= 0)
            throw new ArgumentNullException(nameof(cipherText));
        if (Key == null || Key.Length <= 0)
            throw new ArgumentNullException(nameof(Key));
        if (IV == null || IV.Length <= 0)
            throw new ArgumentNullException(nameof(IV));

        // Declare the string used to hold the decrypted text.
        string plaintext = null;

        // Create a Aes object with the specified key and IV.
        using (Aes aesAlg = Aes.Create())
        {
            aesAlg.Key = Key;
            aesAlg.IV = IV;

            // Create a decryptor to perform the stream transform.
            ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);

            // Create the streams used for decryption.
            using (MemoryStream msDecrypt = new(cipherText))
            {
                using (CryptoStream csDecrypt = new(msDecrypt, decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader srDecrypt = new(csDecrypt))
                    {

                        // Read the decrypted bytes from the decrypting stream
                        // and place them in a string.
                        plaintext = srDecrypt.ReadToEnd();
                    }
                }
            }
        }

        return plaintext;
    }
}
Imports System.IO
Imports System.Security.Cryptography

Class AesExample

    Public Shared Sub Main()
        Try
            Dim original As String = "Here is some data to encrypt!"

            ' Create a new instance of the Aes class.
            ' This generates a new key and initialization vector (IV).
            Using myAes = Aes.Create()

                ' Encrypt the string to an array of bytes.
                Dim encrypted As Byte() = EncryptStringToBytes(original, myAes.Key, myAes.IV)

                ' Decrypt the bytes to a string.
                Dim roundtrip As String = DecryptStringFromBytes(encrypted, myAes.Key, myAes.IV)

                'Display the original data and the decrypted data.
                Console.WriteLine("Original:   {0}", original)
                Console.WriteLine("Round Trip: {0}", roundtrip)
            End Using
        Catch e As Exception
            Console.WriteLine("Error: {0}", e.Message)
        End Try
    End Sub

    Shared Function EncryptStringToBytes(ByVal plainText As String, ByVal Key() As Byte, ByVal IV() As Byte) As Byte()
        ' Check arguments.
        If plainText Is Nothing OrElse plainText.Length <= 0 Then
            Throw New ArgumentNullException(NameOf(plainText))
        End If
        If Key Is Nothing OrElse Key.Length <= 0 Then
            Throw New ArgumentNullException(NameOf(Key))
        End If
        If IV Is Nothing OrElse IV.Length <= 0 Then
            Throw New ArgumentNullException(NameOf(IV))
        End If
        Dim encrypted() As Byte

        ' Create an Aes object with the specified key and IV.
        Using aesAlg = Aes.Create()

            aesAlg.Key = Key
            aesAlg.IV = IV

            ' Create an encryptor to perform the stream transform.
            Dim encryptor As ICryptoTransform = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV)
            ' Create the streams used for encryption.
            Using msEncrypt As New MemoryStream()
                Using csEncrypt As New CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)
                    Using swEncrypt As New StreamWriter(csEncrypt)

                        ' Write all data to the stream.
                        swEncrypt.Write(plainText)
                    End Using
                    encrypted = msEncrypt.ToArray()
                End Using
            End Using
        End Using

        ' Return the encrypted bytes from the memory stream.
        Return encrypted

    End Function 'EncryptStringToBytes

    Shared Function DecryptStringFromBytes(
        ByVal cipherText() As Byte,
        ByVal Key() As Byte,
        ByVal IV() As Byte) As String
        ' Check arguments.
        If cipherText Is Nothing OrElse cipherText.Length <= 0 Then
            Throw New ArgumentNullException(NameOf(cipherText))
        End If
        If Key Is Nothing OrElse Key.Length <= 0 Then
            Throw New ArgumentNullException(NameOf(Key))
        End If
        If IV Is Nothing OrElse IV.Length <= 0 Then
            Throw New ArgumentNullException(NameOf(IV))
        End If

        ' Declare the string used to hold the decrypted text.
        Dim plaintext As String = Nothing

        ' Create an Aes object with the specified key and IV.
        Using aesAlg = Aes.Create()
            aesAlg.Key = Key
            aesAlg.IV = IV

            ' Create a decryptor to perform the stream transform.
            Dim decryptor As ICryptoTransform = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV)

            ' Create the streams used for decryption.
            Using msDecrypt As New MemoryStream(cipherText)
                Using csDecrypt As New CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)
                    Using srDecrypt As New StreamReader(csDecrypt)
                        ' Read the decrypted bytes from the decrypting stream
                        ' and place them in a string.
                        plaintext = srDecrypt.ReadToEnd()
                    End Using
                End Using
            End Using
        End Using

        Return plaintext

    End Function 'DecryptStringFromBytes 
End Class

Opmerkingen

De algemene taalruntime maakt gebruik van een streamgeoriënteerd ontwerp voor cryptografie. De kern van dit ontwerp is CryptoStream. Cryptografische objecten die worden geïmplementeerd CryptoStream , kunnen worden gekoppeld aan alle objecten die worden geïmplementeerd Stream, zodat de gestreamde uitvoer van het ene object kan worden ingevoerd in de invoer van een ander object. Het tussenliggende resultaat (de uitvoer van het eerste object) hoeft niet afzonderlijk te worden opgeslagen.

Important

In .NET 6 en nieuwere versies, wanneer Stream.Read of Stream.ReadAsync wordt aangeroepen met een buffer van lengte N, wordt de bewerking voltooid wanneer ten minste 1 byte uit de stream is gelezen, of de onderliggende stroom die wordt verpakt, retourneert 0 van een aanroep naar Read, wat aangeeft dat er geen gegevens meer beschikbaar zijn. In .NET Framework worden Stream.Read en Stream.ReadAsync pas geretourneerd als alle N bytes zijn gelezen uit de stroom of de onderliggende stroom retourneert 0 van een aanroep naar Read. Als uw code ervan uitgaat dat de Read methoden pas worden geretourneerd als alle N bytes zijn gelezen, kan de code niet alle inhoud lezen. Zie Gedeeltelijke en nul-byte-leesbewerkingen in streams voor meer informatie.

Sluit het CryptoStream object altijd expliciet nadat u klaar bent met het gebruik ervan door de Clear methode aan te roepen. Hierdoor wordt de onderliggende stroom leeggemaakt en worden alle resterende gegevensblokken door het CryptoStream object verwerkt. Als er echter een uitzondering optreedt voordat u de Close methode aanroept, is het CryptoStream object mogelijk niet gesloten. Plaats uw aanroep naar de Clear methode binnen het finally blok van een trycatch/instructie om ervoor te zorgen dat de Close methode altijd wordt aangeroepen.

Met dit type wordt de IDisposable interface geïmplementeerd. Wanneer u klaar bent met het gebruik van het type, moet u het direct of indirect verwijderen door de Clear methode aan te roepen, die op zijn beurt de IDisposable implementatie aanroept. Als u het type rechtstreeks wilt verwijderen, roept u de Clear methode aan in een try/catch blok. Als u deze indirect wilt verwijderen, gebruikt u een taalconstructie zoals using (in C#) of Using (in Visual Basic).

Constructors

Name Description
CryptoStream(Stream, ICryptoTransform, CryptoStreamMode, Boolean)

Initialiseert een nieuw exemplaar van de CryptoStream klasse.

CryptoStream(Stream, ICryptoTransform, CryptoStreamMode)

Initialiseert een nieuw exemplaar van de CryptoStream klasse met een doelgegevensstroom, de transformatie die moet worden gebruikt en de modus van de stream.

Eigenschappen

Name Description
CanRead

Hiermee wordt een waarde opgehaald die aangeeft of de huidige CryptoStream leesbaar is.

CanSeek

Hiermee wordt een waarde opgehaald die aangeeft of u binnen de huidige CryptoStreamkunt zoeken.

CanTimeout

Hiermee wordt een waarde opgehaald die bepaalt of er een time-out optreedt voor de huidige stroom.

(Overgenomen van Stream)
CanWrite

Hiermee wordt een waarde opgehaald die aangeeft of de huidige CryptoStream beschrijfbaar is.

HasFlushedFinalBlock

Hiermee wordt een waarde opgehaald die aangeeft of het laatste bufferblok naar de onderliggende stroom is geschreven.

Length

Hiermee haalt u de lengte op in bytes van de stream.

Position

Hiermee haalt u de positie in de huidige stroom op of stelt u deze in.

ReadTimeout

Hiermee wordt een waarde opgehaald of ingesteld, in milliseconden, die bepaalt hoe lang de stroom probeert te lezen voordat er een time-out optreedt.

(Overgenomen van Stream)
WriteTimeout

Hiermee wordt een waarde opgehaald of ingesteld, in milliseconden, die bepaalt hoe lang de stream probeert te schrijven voordat er een time-out optreedt.

(Overgenomen van Stream)

Methoden

Name Description
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Begint een asynchrone leesbewerking. (Overweeg in plaats daarvan om te gebruiken ReadAsync .)

BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Begint een asynchrone leesbewerking. (Overweeg in plaats daarvan om te gebruiken ReadAsync(Byte[], Int32, Int32) .)

(Overgenomen van Stream)
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Hiermee wordt een asynchrone schrijfbewerking gestart. (Overweeg in plaats daarvan om te gebruiken WriteAsync .)

BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Hiermee wordt een asynchrone schrijfbewerking gestart. (Overweeg in plaats daarvan om te gebruiken WriteAsync(Byte[], Int32, Int32) .)

(Overgenomen van Stream)
Clear()

Alle resources die worden gebruikt door de CryptoStream.

Close()

Hiermee sluit u de huidige stroom en worden alle resources (zoals sockets en bestandsingangen) die aan de huidige stroom zijn gekoppeld, vrijgegeven.

Close()

Hiermee sluit u de huidige stroom en worden alle resources (zoals sockets en bestandsingangen) die aan de huidige stroom zijn gekoppeld, vrijgegeven. In plaats van deze methode aan te roepen, moet u ervoor zorgen dat de stream correct wordt verwijderd.

(Overgenomen van Stream)
CopyTo(Stream, Int32)

Leest de bytes uit de huidige stream en schrijft ze naar een andere stroom, met behulp van een opgegeven buffergrootte. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CopyTo(Stream)

Leest de bytes uit de huidige stream en schrijft ze naar een andere stream. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CopyToAsync(Stream, CancellationToken)

Asynchroon leest de bytes uit de huidige stream en schrijft deze naar een andere stream met behulp van een opgegeven annuleringstoken. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CopyToAsync(Stream, Int32, CancellationToken)

Asynchroon leest de bytes uit de huidige stream en schrijft deze naar een andere stroom, met behulp van een opgegeven buffergrootte en annuleringstoken. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CopyToAsync(Stream, Int32)

Asynchroon leest de bytes uit de huidige stream en schrijft deze naar een andere stroom, met behulp van een opgegeven buffergrootte. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CopyToAsync(Stream)

Asynchroon leest de bytes uit de huidige stream en schrijft ze naar een andere stream. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CreateObjRef(Type)

Hiermee maakt u een object dat alle relevante informatie bevat die nodig is om een proxy te genereren die wordt gebruikt om te communiceren met een extern object.

(Overgenomen van MarshalByRefObject)
CreateWaitHandle()
Verouderd.

Wijst een WaitHandle object toe.

(Overgenomen van Stream)
Dispose()

Alle resources die worden gebruikt door de Stream.

(Overgenomen van Stream)
Dispose(Boolean)

Publiceert de niet-beheerde resources die worden gebruikt door de CryptoStream beheerde resources en brengt eventueel de beheerde resources vrij.

DisposeAsync()

Geeft asynchroon de onbeheerde resources vrij die worden gebruikt door de CryptoStream.

EndRead(IAsyncResult)

Wacht totdat de asynchrone leesbewerking is voltooid. (Overweeg in plaats daarvan om te gebruiken ReadAsync .)

EndRead(IAsyncResult)

Wacht totdat de asynchrone leesbewerking is voltooid. (Overweeg in plaats daarvan om te gebruiken ReadAsync(Byte[], Int32, Int32) .)

(Overgenomen van Stream)
EndWrite(IAsyncResult)

Hiermee wordt een asynchrone schrijfbewerking beëindigd. (Overweeg in plaats daarvan om te gebruiken WriteAsync .)

EndWrite(IAsyncResult)

Hiermee wordt een asynchrone schrijfbewerking beëindigd. (Overweeg in plaats daarvan om te gebruiken WriteAsync(Byte[], Int32, Int32) .)

(Overgenomen van Stream)
Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
Finalize()

Hiermee kan een object resources vrijmaken en andere opschoonbewerkingen uitvoeren voordat het wordt vrijgemaakt door garbagecollection.

Flush()

Wist alle buffers voor de huidige stroom en zorgt ervoor dat gebufferde gegevens naar het onderliggende apparaat worden geschreven.

FlushAsync()

Asynchroon wist alle buffers voor deze stroom en zorgt ervoor dat eventuele gebufferde gegevens naar het onderliggende apparaat worden geschreven.

(Overgenomen van Stream)
FlushAsync(CancellationToken)

Wist alle buffers voor de huidige stroom asynchroon, zorgt ervoor dat gebufferde gegevens naar het onderliggende apparaat worden geschreven en annuleringsaanvragen worden gecontroleerd.

FlushFinalBlock()

Werkt de onderliggende gegevensbron of opslagplaats bij met de huidige status van de buffer en wist vervolgens de buffer.

GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetLifetimeService()

Hiermee haalt u het huidige levensduurserviceobject op waarmee het levensduurbeleid voor dit exemplaar wordt beheerd.

(Overgenomen van MarshalByRefObject)
GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
InitializeLifetimeService()

Hiermee haalt u een levensduurserviceobject op om het levensduurbeleid voor dit exemplaar te beheren.

(Overgenomen van MarshalByRefObject)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
MemberwiseClone(Boolean)

Hiermee maakt u een ondiepe kopie van het huidige MarshalByRefObject object.

(Overgenomen van MarshalByRefObject)
ObjectInvariant()
Verouderd.

Biedt ondersteuning voor een Contract.

(Overgenomen van Stream)
Read(Byte[], Int32, Int32)

Hiermee wordt een reeks bytes uit de huidige stroom gelezen en wordt de positie binnen de stream verplaatst door het aantal bytes dat is gelezen.

Read(Span<Byte>)

Wanneer deze wordt overschreven in een afgeleide klasse, leest u een reeks bytes uit de huidige stroom en wordt de positie binnen de stream verplaatst door het aantal gelezen bytes.

(Overgenomen van Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

Hiermee wordt een reeks bytes van de huidige stroom asynchroon gelezen, wordt de positie binnen de stream verplaatst door het aantal gelezen bytes en worden annuleringsaanvragen gecontroleerd.

ReadAsync(Byte[], Int32, Int32)

Asynchroon leest een reeks bytes uit de huidige stroom en wordt de positie binnen de stream verplaatst door het aantal gelezen bytes.

(Overgenomen van Stream)
ReadAsync(Memory<Byte>, CancellationToken)

Asynchroon leest een reeks bytes uit de huidige stroom, verplaatst de positie binnen de stream door het aantal gelezen bytes en bewaakt annuleringsaanvragen.

(Overgenomen van Stream)
ReadByte()

Hiermee leest u een byte uit de stroom en wordt de positie binnen de stream met één byte vooruit gelezen of wordt -1 geretourneerd als aan het einde van de stream.

ReadByte()

Hiermee leest u een byte uit de stroom en wordt de positie binnen de stream met één byte vooruit gelezen of wordt -1 geretourneerd als aan het einde van de stream.

(Overgenomen van Stream)
Seek(Int64, SeekOrigin)

Hiermee stelt u de positie in de huidige stroom in.

SetLength(Int64)

Hiermee stelt u de lengte van de huidige stroom in.

ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)
Write(Byte[], Int32, Int32)

Hiermee schrijft u een reeks bytes naar de huidige CryptoStream en wordt de huidige positie binnen de stroom verplaatst door het aantal geschreven bytes.

Write(ReadOnlySpan<Byte>)

Wanneer deze wordt overschreven in een afgeleide klasse, schrijft u een reeks bytes naar de huidige stroom en wordt de huidige positie binnen deze stroom verplaatst met het aantal geschreven bytes.

(Overgenomen van Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

Hiermee schrijft u een reeks bytes asynchroon naar de huidige stroom, wordt de huidige positie binnen de stream verplaatst door het aantal geschreven bytes en worden annuleringsaanvragen gecontroleerd.

WriteAsync(Byte[], Int32, Int32)

Asynchroon schrijft een reeks bytes naar de huidige stroom en wordt de huidige positie binnen deze stroom verplaatst door het aantal geschreven bytes.

(Overgenomen van Stream)
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Asynchroon schrijft een reeks bytes naar de huidige stroom, verplaatst de huidige positie binnen deze stream door het aantal geschreven bytes en bewaakt annuleringsaanvragen.

(Overgenomen van Stream)
WriteByte(Byte)

Hiermee schrijft u een byte naar de huidige positie in de stroom en wordt de positie binnen de stream met één byte vooruit.

WriteByte(Byte)

Hiermee schrijft u een byte naar de huidige positie in de stroom en wordt de positie binnen de stream met één byte vooruit.

(Overgenomen van Stream)

Expliciete interface-implementaties

Name Description
IDisposable.Dispose()

Deze API ondersteunt de productinfrastructuur en is niet bedoeld om rechtstreeks vanuit de code te gebruiken.

Releases van de resources die worden gebruikt door het huidige exemplaar van de CryptoStream klasse.

Extensiemethoden

Name Description
ConfigureAwait(IAsyncDisposable, Boolean)

Hiermee configureert u hoe wacht op de taken die worden geretourneerd op basis van een asynchroon wegwerp, worden uitgevoerd.

Van toepassing op

Zie ook