SymmetricAlgorithm Klass

Definition

Representerar den abstrakta basklass som alla implementeringar av symmetriska algoritmer måste ärva från.

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
Arv
SymmetricAlgorithm
Härledda
Attribut
Implementeringar

Exempel

I följande kodexempel används Aes klassen med den angivna Key egenskapen och initieringsvektorn (IV) för att kryptera en fil som anges av inNameoch matar ut det krypterade resultatet till filen som anges av outName. Parametrarna desKey och desIV för metoden är 8-bytesmatriser. Du måste ha det högkrypteringspaketet installerat för att kunna köra det här exemplet.

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

Kommentarer

Klasserna som härleds från SymmetricAlgorithm klassen använder ett länkningsläge som kallas chifferblocklänkning (CBC), som kräver en nyckel (Key) och en initieringsvektor (IV) för att utföra kryptografiska omvandlingar på data. Om du vill dekryptera data som krypterats med någon av klasserna SymmetricAlgorithm måste du ange Key egenskapen och IV egenskapen till samma värden som användes för kryptering. För att en symmetrisk algoritm ska vara användbar måste den hemliga nyckeln endast vara känd för avsändaren och mottagaren.

Aes, DES, RC2, och TripleDES är implementeringar av symmetriska algoritmer.

Observera att när du använder härledda klasser räcker det inte att, ur ett säkerhetsperspektiv, helt enkelt tvinga fram en skräpinsamling när du är klar med att använda objektet. Du måste uttryckligen Clear anropa -metoden på objektet för att nollställa alla känsliga data i objektet innan det släpps. Observera att skräpinsamlingen inte nollar innehållet i insamlade objekt utan helt enkelt markerar minnet som tillgängligt för omallokering. Därför kan data som finns i ett skräpinsamlingsobjekt fortfarande finnas i minneshögen i oallokerat minne. När det gäller kryptografiska objekt kan dessa data innehålla känslig information, till exempel nyckeldata eller ett block med oformaterad text.

Alla kryptografiska klasser i .NET Framework som innehåller känsliga data implementerar en Clear-metod. När den Clear anropas skriver metoden över alla känsliga data i objektet med nollor och släpper sedan objektet så att det kan samlas in på ett säkert sätt. När objektet har nollställts och släppts bör du anropa Dispose metoden med parametern disposing inställd på för att True ta bort alla hanterade och ohanterade resurser som är associerade med objektet.

Anteckningar till implementerare

När du ärver från SymmetricAlgorithm klassen måste du åsidosätta följande medlemmar: CreateDecryptor(Byte[], Byte[]), CreateEncryptor(Byte[], Byte[]), GenerateIV()och GenerateKey().

Konstruktorer

Name Description
SymmetricAlgorithm()

Initierar en ny instans av SymmetricAlgorithm klassen.

Fält

Name Description
BlockSizeValue

Representerar blockstorleken i bitar för den kryptografiska åtgärden.

FeedbackSizeValue

Representerar feedbackstorleken i bitar för den kryptografiska åtgärden.

IVValue

Representerar initieringsvektorn (IV) för den symmetriska algoritmen.

KeySizeValue

Representerar storleken, i bitar, på den hemliga nyckel som används av den symmetriska algoritmen.

KeyValue

Representerar den hemliga nyckeln för den symmetriska algoritmen.

LegalBlockSizesValue

Anger de blockstorlekar i bitar som stöds av den symmetriska algoritmen.

LegalKeySizesValue

Anger de nyckelstorlekar i bitar som stöds av den symmetriska algoritmen.

ModeValue

Representerar chifferläget som används i den symmetriska algoritmen.

PaddingValue

Representerar utfyllnadsläget som används i den symmetriska algoritmen.

Egenskaper

Name Description
BlockSize

Hämtar eller anger blockstorleken i bitar för den kryptografiska åtgärden.

FeedbackSize

Hämtar eller anger feedbackstorleken i bitar för krypteringsåtgärden för chifferfeedback (CFB) och UTdatafeedback (OFB).

IV

Hämtar eller anger initieringsvektorn (IV) för den symmetriska algoritmen.

Key

Hämtar eller anger den hemliga nyckeln för den symmetriska algoritmen.

KeySize

Hämtar eller anger storleken, i bitar, på den hemliga nyckel som används av den symmetriska algoritmen.

LegalBlockSizes

Hämtar blockstorlekarna i bitar som stöds av den symmetriska algoritmen.

LegalKeySizes

Hämtar de nyckelstorlekar, i bitar, som stöds av den symmetriska algoritmen.

Mode

Hämtar eller anger läget för drift av den symmetriska algoritmen.

Padding

Hämtar eller anger utfyllnadsläget som används i den symmetriska algoritmen.

Metoder

Name Description
Clear()

Släpper alla resurser som används av SymmetricAlgorithm klassen.

Create()
Föråldrad.
Föråldrad.

Skapar ett standardkryptografiskt objekt som används för att utföra den symmetriska algoritmen.

Create(String)
Föråldrad.

Skapar det angivna kryptografiska objektet som används för att utföra den symmetriska algoritmen.

CreateDecryptor()

Skapar ett symmetriskt dekrypteringsobjekt med den aktuella Key egenskapen och initieringsvektorn (IV).

CreateDecryptor(Byte[], Byte[])

När det åsidosättas i en härledd klass skapar ett symmetriskt dekrypteringsobjekt med den angivna Key egenskapen och initieringsvektorn (IV).

CreateEncryptor()

Skapar ett symmetriskt krypteringsobjekt med den aktuella Key egenskapen och initieringsvektorn (IV).

CreateEncryptor(Byte[], Byte[])

När det åsidosättas i en härledd klass skapar ett symmetriskt krypteringsobjekt med den angivna Key egenskapen och initieringsvektorn (IV).

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

Dekrypterar data med CBC-läge med det angivna utfyllnadsläget.

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

Dekrypterar data med CBC-läge med det angivna utfyllnadsläget.

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

Dekrypterar data till den angivna bufferten med hjälp av CBC-läge med det angivna utfyllnadsläget.

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

Dekrypterar data med CFB-läge med angivet utfyllnadsläge och feedbackstorlek.

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

Dekrypterar data med CFB-läge med angivet utfyllnadsläge och feedbackstorlek.

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

Dekrypterar data till den angivna bufferten med CFB-läge med angivet utfyllnadsläge och feedbackstorlek.

DecryptEcb(Byte[], PaddingMode)

Dekrypterar data med ECB-läge med angivet utfyllnadsläge.

DecryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Dekrypterar data med ECB-läge med angivet utfyllnadsläge.

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

Dekrypterar data till den angivna bufferten med hjälp av ECB-läge med angivet utfyllnadsläge.

Dispose()

Släpper alla resurser som används av den aktuella instansen SymmetricAlgorithm av klassen.

Dispose(Boolean)

Släpper de ohanterade resurser som används av SymmetricAlgorithm och släpper eventuellt de hanterade resurserna.

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

Krypterar data med CBC-läge med det angivna utfyllnadsläget.

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

Krypterar data med CBC-läge med det angivna utfyllnadsläget.

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

Krypterar data till den angivna bufferten med hjälp av CBC-läge med det angivna utfyllnadsläget.

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

Krypterar data med CFB-läge med angivet utfyllnadsläge och feedbackstorlek.

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

Krypterar data med CFB-läge med angivet utfyllnadsläge och feedbackstorlek.

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

Krypterar data till den angivna bufferten med CFB-läge med angivet utfyllnadsläge och feedbackstorlek.

EncryptEcb(Byte[], PaddingMode)

Krypterar data med ECB-läge med angivet utfyllnadsläge.

EncryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Krypterar data med ECB-läge med angivet utfyllnadsläge.

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

Krypterar data till den angivna bufferten med hjälp av ECB-läge med angivet utfyllnadsläge.

Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
Finalize()

Den här medlemmen åsidosätter Finalize(), och mer fullständig dokumentation kan vara tillgänglig i det ämnet.

Tillåter ett Object försök att frigöra resurser och utföra andra rensningsåtgärder innan Object den frigörs av skräpinsamlingen.

GenerateIV()

När den åsidosättas i en härledd klass genererar en slumpmässig initieringsvektor (IV) som ska användas för algoritmen.

GenerateKey()

När den åsidosättas i en härledd klass genererar en slumpmässig nyckel (Key) som ska användas för algoritmen.

GetCiphertextLengthCbc(Int32, PaddingMode)

Hämtar längden på en chiffertext med ett angivet utfyllnadsläge och klartextlängd i CBC-läge.

GetCiphertextLengthCfb(Int32, PaddingMode, Int32)

Hämtar längden på en chiffertext med ett angivet utfyllnadsläge och klartextlängd i CFB-läge.

GetCiphertextLengthEcb(Int32, PaddingMode)

Hämtar längden på en chiffertext med ett angivet utfyllnadsläge och klartextlängd i ECB-läge.

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(ReadOnlySpan<Byte>)

Anger nyckeln för den här instansen.

SetKeyCore(ReadOnlySpan<Byte>)

Anger nyckeln för den här instansen.

ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)
TryDecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode)

Försöker dekryptera data till den angivna bufferten med hjälp av CBC-läge med det angivna utfyllnadsläget.

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

När de åsidosätts i en härledd klass försöker dekryptera data till den angivna bufferten med hjälp av CBC-läge med det angivna utfyllnadsläget.

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

Försöker dekryptera data till den angivna bufferten med CFB-läge med angivet utfyllnadsläge och feedbackstorlek.

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

När de åsidosättas i en härledd klass försöker dekryptera data till den angivna bufferten med cfb-läge med angivet utfyllnadsläge och feedbackstorlek.

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

Försöker dekryptera data till den angivna bufferten med hjälp av ECB-läge med angivet utfyllnadsläge.

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

När de åsidosättas i en härledd klass försöker dekryptera data till den angivna bufferten med hjälp av ECB-läge med det angivna utfyllnadsläget.

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

Försöker kryptera data till den angivna bufferten med hjälp av CBC-läge med det angivna utfyllnadsläget.

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

När de åsidosätts i en härledd klass försöker kryptera data till den angivna bufferten med hjälp av CBC-läge med det angivna utfyllnadsläget.

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

Försöker kryptera data till den angivna bufferten med CFB-läge med angivet utfyllnadsläge och feedbackstorlek.

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

När de åsidosättas i en härledd klass, försöker kryptera data till den angivna bufferten med cfb-läge med det angivna utfyllnadsläget och feedbackstorleken.

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

Försöker kryptera data till den angivna bufferten med hjälp av ECB-läge med det angivna utfyllnadsläget.

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

När de åsidosättas i en härledd klass, försöker kryptera data till den angivna bufferten med hjälp av ECB-läge med det angivna utfyllnadsläget.

ValidKeySize(Int32)

Avgör om den angivna nyckelstorleken är giltig för den aktuella algoritmen.

Explicita gränssnittsimplementeringar

Name Description
IDisposable.Dispose()

Detta API stöder produktinfrastrukturen och är inte avsett att användas direkt från koden.

Släpper de ohanterade resurser som används av SymmetricAlgorithm och släpper eventuellt de hanterade resurserna.

Gäller för

Se även