CryptoStream Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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
- 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. |