Partager via


SymmetricAlgorithm Classe

Définition

Représente la classe de base abstraite dont toutes les implémentations des algorithmes symétriques doivent hériter.

public ref class SymmetricAlgorithm abstract : IDisposable
public abstract class SymmetricAlgorithm : IDisposable
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class SymmetricAlgorithm : IDisposable
type SymmetricAlgorithm = class
    interface IDisposable
[<System.Runtime.InteropServices.ComVisible(true)>]
type SymmetricAlgorithm = class
    interface IDisposable
Public MustInherit Class SymmetricAlgorithm
Implements IDisposable
Héritage
SymmetricAlgorithm
Dérivé
Attributs
Implémente

Exemples

L’exemple de code suivant utilise la Aes classe avec la propriété et le vecteur d’initialisation spécifiés Key (IV) pour chiffrer un fichier spécifié par inName, et génère le résultat chiffré dans le fichier spécifié par outName. Les desKey paramètres et desIV de la méthode sont des tableaux de 8 octets. Le pack à chiffrement élevé doit être installé pour exécuter cet exemple.

void EncryptData( String^ inName, String^ outName, array<Byte>^aesKey, array<Byte>^aesIV )
{
   
   //Create the file streams to handle the input and output files.
   FileStream^ fin = gcnew FileStream( inName,FileMode::Open,FileAccess::Read );
   FileStream^ fout = gcnew FileStream( outName,FileMode::OpenOrCreate,FileAccess::Write );
   fout->SetLength( 0 );
   
   //Create variables to help with read and write.
   array<Byte>^bin = gcnew array<Byte>(100);
   long rdlen = 0; //This is the total number of bytes written.

   long totlen = (long)fin->Length; //This is the total length of the input file.

   int len; //This is the number of bytes to be written at a time.

   Aes^ aes = Aes::Create();

   CryptoStream^ encStream = gcnew CryptoStream( fout,aes->CreateEncryptor( aesKey, aesIV ),CryptoStreamMode::Write );
   Console::WriteLine( "Encrypting..." );
   
   //Read from the input file, then encrypt and write to the output file.
   while ( rdlen < totlen )
   {
      len = fin->Read( bin, 0, 100 );
      encStream->Write( bin, 0, len );
      rdlen = rdlen + len;
      Console::WriteLine( "{0} bytes processed", rdlen );
   }

   encStream->Close();
   fout->Close();
   fin->Close();
}
private static void EncryptData(string inName, string outName, byte[] aesKey, byte[] aesIV)
 {
     //Create the file streams to handle the input and output files.
     FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);
     FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
     fout.SetLength(0);

     //Create variables to help with read and write.
     byte[] bin = new byte[100]; //This is intermediate storage for the encryption.
     long rdlen = 0;              //This is the total number of bytes written.
     long totlen = fin.Length;    //This is the total length of the input file.
     int len;                     //This is the number of bytes to be written at a time.

     Aes aes = Aes.Create();
     CryptoStream encStream = new CryptoStream(fout, aes.CreateEncryptor(aesKey, aesIV), CryptoStreamMode.Write);

     Console.WriteLine("Encrypting...");

     //Read from the input file, then encrypt and write to the output file.
     while(rdlen < totlen)
     {
         len = fin.Read(bin, 0, 100);
         encStream.Write(bin, 0, len);
         rdlen = rdlen + len;
         Console.WriteLine("{0} bytes processed", rdlen);
     }

     encStream.Close();
     fout.Close();
     fin.Close();
 }
Private Shared Sub EncryptData(inName As String, outName As String, _
rijnKey() As Byte, rijnIV() As Byte)

    'Create the file streams to handle the input and output files.
    Dim fin As New FileStream(inName, FileMode.Open, FileAccess.Read)
    Dim fout As New FileStream(outName, FileMode.OpenOrCreate, _
       FileAccess.Write)
    fout.SetLength(0)
    
    'Create variables to help with read and write.
    Dim bin(100) As Byte 'This is intermediate storage for the encryption.
    Dim rdlen As Long = 0 'This is the total number of bytes written.
    Dim totlen As Long = fin.Length 'Total length of the input file.
    Dim len As Integer 'This is the number of bytes to be written at a time.
    'Creates the default implementation, which is RijndaelManaged.
    Dim rijn As SymmetricAlgorithm = SymmetricAlgorithm.Create()
    Dim encStream As New CryptoStream(fout, _
       rijn.CreateEncryptor(rijnKey, rijnIV), CryptoStreamMode.Write)
    
    Console.WriteLine("Encrypting...")
    
    'Read from the input file, then encrypt and write to the output file.
    While rdlen < totlen
        len = fin.Read(bin, 0, 100)
        encStream.Write(bin, 0, len)
        rdlen = Convert.ToInt32(rdlen + len)
        Console.WriteLine("{0} bytes processed", rdlen)
    End While
    
    encStream.Close()
fout.Close()
fin.Close()
End Sub

Remarques

Les classes qui dérivent de la SymmetricAlgorithm classe utilisent un mode de chaînage appelé cipher block chaining (CBC), qui nécessite une clé (Key) et un vecteur d’initialisation (IV) pour effectuer des transformations de chiffrement sur les données. Pour déchiffrer les données chiffrées à l’aide de l’une SymmetricAlgorithm des classes, vous devez définir la Key propriété et la IV propriété sur les mêmes valeurs que celles utilisées pour le chiffrement. Pour qu’un algorithme symétrique soit utile, la clé secrète doit être connue uniquement de l’expéditeur et du destinataire.

Aes, DES, RC2et TripleDES sont des implémentations d’algorithmes symétriques.

Notez que lorsque vous utilisez des classes dérivées, il ne suffit pas, du point de vue de la sécurité, de simplement forcer un garbage collection une fois que vous avez fini d’utiliser l’objet . Vous devez appeler explicitement la Clear méthode sur l’objet pour zéro toutes les données sensibles au sein de l’objet avant qu’elles ne soit libérées. Notez que le garbage collection ne fait pas zéro le contenu des objets collectés, mais marque simplement la mémoire comme disponible pour la réaffectation. Ainsi, les données contenues dans un objet garbage collection peuvent toujours être présentes dans le tas de mémoire dans la mémoire non allouée. Dans le cas d’objets de chiffrement, ces données peuvent contenir des informations sensibles telles que des données de clé ou un bloc de texte brut.

Toutes les classes de chiffrement du .NET Framework qui contiennent des données sensibles implémentent une Clear méthode. Lorsqu’elle est appelée, la Clear méthode remplace toutes les données sensibles au sein de l’objet par des zéros, puis libère l’objet afin qu’il puisse être récupéré en toute sécurité. Une fois l’objet mis à True zéro et libéré, vous devez appeler la Dispose méthode avec le disposing paramètre défini sur pour supprimer toutes les ressources managées et non managées associées à l’objet.

Notes pour les responsables de l’implémentation

Lorsque vous héritez de la SymmetricAlgorithm classe , vous devez remplacer les membres suivants : CreateDecryptor(Byte[], Byte[]), CreateEncryptor(Byte[], Byte[]), GenerateIV()et GenerateKey().

Constructeurs

SymmetricAlgorithm()

Initialise une nouvelle instance de la classe SymmetricAlgorithm.

Champs

BlockSizeValue

Représente la taille de bloc, en bits, de l'opération de chiffrement.

FeedbackSizeValue

Représente la taille des commentaires, en bits, de l'opération de chiffrement.

IVValue

Représente le vecteur d'initialisation (IV) pour l'algorithme symétrique.

KeySizeValue

Représente la taille, en bits, de la clé secrète utilisée par l'algorithme symétrique.

KeyValue

Représente la clé secrète pour l'algorithme symétrique.

LegalBlockSizesValue

Spécifie les tailles de bloc, en octets, prises en charge par l'algorithme symétrique.

LegalKeySizesValue

Spécifie les tailles de clé, en octets, prises en charge par l'algorithme symétrique.

ModeValue

Représente le mode de chiffrement utilisé dans l'algorithme symétrique.

PaddingValue

Représente le mode de remplissage utilisé dans l'algorithme symétrique.

Propriétés

BlockSize

Obtient ou définit la taille de bloc, en bits, de l'opération de chiffrement.

FeedbackSize

Obtient ou définit la taille des commentaires, en bits, de l’opération de chiffrement pour les modes de chiffrement CFB (Cipher Feedback) et OFB (Output Feedback).

IV

Obtient ou définit le vecteur d'initialisation (IV) pour l'algorithme symétrique.

Key

Obtient ou définit la clé secrète pour l'algorithme symétrique.

KeySize

Obtient ou définit la taille, en bits, de la clé secrète utilisée par l'algorithme symétrique.

LegalBlockSizes

Obtient les tailles de bloc, en octets, prises en charge par l'algorithme symétrique.

LegalKeySizes

Obtient les tailles de clé, en octets, prises en charge par l'algorithme symétrique.

Mode

Obtient ou définit le mode de fonctionnement pour l'algorithme symétrique.

Padding

Obtient ou définit le mode de remplissage utilisé dans l'algorithme symétrique.

Méthodes

Clear()

Libère toutes les ressources utilisées par la classe SymmetricAlgorithm.

Create()
Obsolète.
Obsolète.

Crée un objet de chiffrement par défaut utilisé pour exécuter l'algorithme symétrique.

Create(String)
Obsolète.

Crée l'objet de chiffrement spécifié utilisé pour exécuter l'algorithme symétrique.

CreateDecryptor()

Crée un objet déchiffreur symétrique avec la propriété Key et le vecteur d'initialisation (IV) actuels.

CreateDecryptor(Byte[], Byte[])

En cas de substitution dans une classe dérivée, crée un objet déchiffreur symétrique avec la propriété Key spécifiée et le vecteur d'initialisation (IV).

CreateEncryptor()

Crée un objet chiffreur symétrique avec la propriété Key et le vecteur d'initialisation (IV) actuels.

CreateEncryptor(Byte[], Byte[])

En cas de substitution dans une classe dérivée, crée un objet chiffreur symétrique avec la propriété Key spécifiée et le vecteur d'initialisation (IV).

DecryptCbc(Byte[], Byte[], PaddingMode)

Déchiffre les données à l’aide du mode CBC avec le mode de remplissage spécifié.

DecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode)

Déchiffre les données à l’aide du mode CBC avec le mode de remplissage spécifié.

DecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

Déchiffre les données dans la mémoire tampon spécifiée, en utilisant le mode CBC avec le mode de remplissage spécifié.

DecryptCfb(Byte[], Byte[], PaddingMode, Int32)

Déchiffre les données à l’aide du mode CFB avec le mode de remplissage et la taille de commentaires spécifiés.

DecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode, Int32)

Déchiffre les données à l’aide du mode CFB avec le mode de remplissage et la taille de commentaires spécifiés.

DecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

Déchiffre les données dans la mémoire tampon spécifiée, à l’aide du mode CFB avec le mode de remplissage et la taille de commentaires spécifiés.

DecryptEcb(Byte[], PaddingMode)

Déchiffre les données à l’aide du mode BCE avec le mode de remplissage spécifié.

DecryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Déchiffre les données à l’aide du mode BCE avec le mode de remplissage spécifié.

DecryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

Déchiffre les données dans la mémoire tampon spécifiée, à l’aide du mode BCE avec le mode de remplissage spécifié.

Dispose()

Libère toutes les ressources utilisées par l'instance actuelle de la classe SymmetricAlgorithm.

Dispose(Boolean)

Libère les ressources non managées utilisées par SymmetricAlgorithm et libère éventuellement les ressources managées.

EncryptCbc(Byte[], Byte[], PaddingMode)

Chiffre les données à l’aide du mode CBC avec le mode de remplissage spécifié.

EncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode)

Chiffre les données à l’aide du mode CBC avec le mode de remplissage spécifié.

EncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

Chiffre les données dans la mémoire tampon spécifiée, en utilisant le mode CBC avec le mode de remplissage spécifié.

EncryptCfb(Byte[], Byte[], PaddingMode, Int32)

Chiffre les données à l’aide du mode CFB avec le mode de remplissage et la taille de commentaires spécifiés.

EncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode, Int32)

Chiffre les données à l’aide du mode CFB avec le mode de remplissage et la taille de commentaires spécifiés.

EncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

Chiffre les données dans la mémoire tampon spécifiée, à l’aide du mode CFB avec le mode de remplissage et la taille de commentaires spécifiés.

EncryptEcb(Byte[], PaddingMode)

Chiffre les données à l’aide du mode BCE avec le mode de remplissage spécifié.

EncryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Chiffre les données à l’aide du mode BCE avec le mode de remplissage spécifié.

EncryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

Chiffre les données dans la mémoire tampon spécifiée, en utilisant le mode BCE avec le mode de remplissage spécifié.

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
Finalize()

Ce membre substitue Finalize(). Une documentation plus complète est peut-être disponible dans cette rubrique.

Autorise Object à tenter de libérer des ressources et d'exécuter d'autres opérations de nettoyage avant que Object soit récupéré par l'opération garbage collection.

GenerateIV()

En cas de substitution dans une classe dérivée, génère un vecteur d'initialisation aléatoire (IV) à utiliser pour l'algorithme.

GenerateKey()

En cas de substitution dans une classe dérivée, génère une clé aléatoire (Key) à utiliser pour l'algorithme.

GetCiphertextLengthCbc(Int32, PaddingMode)

Obtient la longueur d’un texte chiffré avec un mode de remplissage donné et une longueur de texte en clair en mode CBC.

GetCiphertextLengthCfb(Int32, PaddingMode, Int32)

Obtient la longueur d’un texte chiffré avec un mode de remplissage donné et une longueur de texte en clair en mode BFC.

GetCiphertextLengthEcb(Int32, PaddingMode)

Obtient la longueur d’un texte chiffré avec un mode de remplissage donné et une longueur de texte en clair en mode BCE.

GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)
TryDecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode)

Tente de déchiffrer des données dans la mémoire tampon spécifiée, en utilisant le mode CBC avec le mode de remplissage spécifié.

TryDecryptCbcCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

En cas de substitution dans une classe dérivée, tente de déchiffrer les données dans la mémoire tampon spécifiée, en utilisant le mode CBC avec le mode de remplissage spécifié.

TryDecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode, Int32)

Tente de déchiffrer des données dans la mémoire tampon spécifiée, à l’aide du mode CFB avec le mode de remplissage et la taille de commentaires spécifiés.

TryDecryptCfbCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32, Int32)

En cas de substitution dans une classe dérivée, tente de déchiffrer les données dans la mémoire tampon spécifiée, en utilisant le mode CFB avec le mode de remplissage et la taille de commentaires spécifiés.

TryDecryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

Tente de déchiffrer des données dans la mémoire tampon spécifiée, en utilisant le mode BCE avec le mode de remplissage spécifié.

TryDecryptEcbCore(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

En cas de substitution dans une classe dérivée, tente de déchiffrer les données dans la mémoire tampon spécifiée, en utilisant le mode BCE avec le mode de remplissage spécifié.

TryEncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode)

Tente de chiffrer des données dans la mémoire tampon spécifiée, en utilisant le mode CBC avec le mode de remplissage spécifié.

TryEncryptCbcCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

En cas de substitution dans une classe dérivée, tente de chiffrer des données dans la mémoire tampon spécifiée, en utilisant le mode CBC avec le mode de remplissage spécifié.

TryEncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode, Int32)

Tente de chiffrer des données dans la mémoire tampon spécifiée, à l’aide du mode CFB avec le mode de remplissage et la taille de commentaires spécifiés.

TryEncryptCfbCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32, Int32)

En cas de substitution dans une classe dérivée, tente de chiffrer des données dans la mémoire tampon spécifiée, en utilisant le mode CFB avec le mode de remplissage et la taille de commentaires spécifiés.

TryEncryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

Tente de chiffrer des données dans la mémoire tampon spécifiée, en utilisant le mode BCE avec le mode de remplissage spécifié.

TryEncryptEcbCore(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

En cas de substitution dans une classe dérivée, tente de chiffrer des données dans la mémoire tampon spécifiée, en utilisant le mode BCE avec le mode de remplissage spécifié.

ValidKeySize(Int32)

Détermine si la taille de clé spécifiée est valide pour l'algorithme en cours.

Implémentations d’interfaces explicites

IDisposable.Dispose()

Cette API prend en charge l'infrastructure du produit et n'est pas destinée à être utilisée directement à partir de votre code.

Libère les ressources non managées utilisées par SymmetricAlgorithm et libère éventuellement les ressources managées.

S’applique à

Voir aussi