SymmetricAlgorithm Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Reprezentuje abstrakcyjną klasę bazową, z której wszystkie implementacje algorytmów symetrycznych muszą dziedziczyć.
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
- Dziedziczenie
-
SymmetricAlgorithm
- Pochodne
- Atrybuty
- Implementuje
Przykłady
W poniższym przykładzie kodu użyto Aes klasy z określoną Key właściwością i wektorem inicjowania (IV) w celu zaszyfrowania pliku określonego przez inName
, i wyprowadza zaszyfrowany wynik do pliku określonego przez outName
. Parametry desKey
i desIV
metody to tablice 8-bajtowe. Aby uruchomić ten przykład, musisz mieć zainstalowany pakiet wysokiego szyfrowania.
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
Uwagi
Klasy pochodzące z SymmetricAlgorithm klasy używają trybu tworzenia łańcucha nazywanego łańcuchem bloków łańcucha (CBC), który wymaga klucza (Key) i wektora inicjowania (IV) do wykonywania przekształceń kryptograficznych na danych. Aby odszyfrować dane zaszyfrowane przy użyciu jednej z SymmetricAlgorithm klas, należy ustawić Key właściwość i IV właściwość na te same wartości, które były używane do szyfrowania. Aby algorytm symetryczny był przydatny, klucz tajny musi być znany tylko nadawcy i odbiorcy.
Aes, , DESRC2i TripleDES to implementacje algorytmów symetrycznych.
Należy pamiętać, że w przypadku używania klas pochodnych nie wystarczy, z perspektywy zabezpieczeń, aby po prostu wymusić odzyskiwanie pamięci po zakończeniu korzystania z obiektu. Przed jego zwolnieniem należy jawnie wywołać metodę Clear na obiekcie , aby wyzerować wszelkie poufne dane w obiekcie. Należy pamiętać, że odzyskiwanie pamięci nie powoduje wyzerowania zawartości zebranych obiektów, ale po prostu oznacza pamięć jako dostępną dla lokalizacji rzeczywistej. W związku z tym dane zawarte w obiekcie zbieranym przez śmieci mogą nadal znajdować się w stercie pamięci w nieprzydzielonego pamięci. W przypadku obiektów kryptograficznych te dane mogą zawierać poufne informacje, takie jak dane klucza lub blok zwykłego tekstu.
Wszystkie klasy kryptograficzne w programie .NET Framework przechowujące poufne dane implementują metodę Clear
. Po wywołaniu Clear
metoda zastępuje wszystkie poufne dane w obiekcie zerami, a następnie zwalnia obiekt, aby można było bezpiecznie odśmiecać śmieci. Gdy obiekt został zerowany i zwolniony, należy wywołać metodę Dispose
z parametrem ustawionym disposing
w True
celu usunięcia wszystkich zarządzanych i niezarządzanych zasobów skojarzonych z obiektem.
Uwagi dotyczące implementowania
Podczas dziedziczenia SymmetricAlgorithm z klasy należy zastąpić następujące elementy członkowskie: CreateDecryptor(Byte[], Byte[]), CreateEncryptor(Byte[], Byte[]), GenerateIV()i GenerateKey().
Konstruktory
SymmetricAlgorithm() |
Inicjuje nowe wystąpienie klasy SymmetricAlgorithm. |
Pola
BlockSizeValue |
Reprezentuje rozmiar bloku w bitach operacji kryptograficznych. |
FeedbackSizeValue |
Reprezentuje rozmiar opinii w bitach operacji kryptograficznych. |
IVValue |
Reprezentuje wektor inicjowania (IV) dla algorytmu symetrycznego. |
KeySizeValue |
Reprezentuje rozmiar klucza tajnego używanego przez algorytm symetryczny w bitach. |
KeyValue |
Reprezentuje klucz tajny algorytmu symetrycznego. |
LegalBlockSizesValue |
Określa rozmiary bloków w bitach, które są obsługiwane przez algorytm symetryczny. |
LegalKeySizesValue |
Określa rozmiary kluczy w bitach, które są obsługiwane przez algorytm symetryczny. |
ModeValue |
Reprezentuje tryb szyfrowania używany w algorytmie symetrycznym. |
PaddingValue |
Reprezentuje tryb uzupełniania używany w algorytmie symetrycznym. |
Właściwości
BlockSize |
Pobiera lub ustawia rozmiar bloku w bitach operacji kryptograficznych. |
FeedbackSize |
Pobiera lub ustawia rozmiar opinii w bitach operacji kryptograficznych dla trybów szyfrowania opinii (CFB) i szyfrowania danych wyjściowych (OFB). |
IV |
Pobiera lub ustawia wektor inicjowania (IV) dla algorytmu symetrycznego. |
Key |
Pobiera lub ustawia klucz tajny dla algorytmu symetrycznego. |
KeySize |
Pobiera lub ustawia rozmiar klucza tajnego używanego przez algorytm symetryczny w bitach. |
LegalBlockSizes |
Pobiera rozmiary bloków w bitach, które są obsługiwane przez algorytm symetryczny. |
LegalKeySizes |
Pobiera rozmiary kluczy w bitach, które są obsługiwane przez algorytm symetryczny. |
Mode |
Pobiera lub ustawia tryb działania algorytmu symetrycznego. |
Padding |
Pobiera lub ustawia tryb uzupełniania używany w algorytmie symetrycznym. |
Metody
Clear() |
Zwalnia wszystkie zasoby używane przez klasę SymmetricAlgorithm . |
Create() |
Przestarzałe.
Przestarzałe.
Tworzy domyślny obiekt kryptograficzny używany do wykonywania algorytmu symetrycznego. |
Create(String) |
Przestarzałe.
Tworzy określony obiekt kryptograficzny używany do wykonywania algorytmu symetrycznego. |
CreateDecryptor() |
Tworzy obiekt odszyfrowywania symetrycznego z bieżącą Key właściwością i wektorem inicjowania (IV). |
CreateDecryptor(Byte[], Byte[]) |
Po zastąpieniu w klasie pochodnej tworzy obiekt odszyfrowywania symetrycznego z określoną Key właściwością i wektorem inicjowania (IV). |
CreateEncryptor() |
Tworzy obiekt szyfrowania symetrycznego z bieżącą Key właściwością i wektorem inicjowania (IV). |
CreateEncryptor(Byte[], Byte[]) |
Po zastąpieniu w klasie pochodnej tworzy obiekt szyfrowania symetrycznego z określoną Key właściwością i wektorem inicjowania (IV). |
DecryptCbc(Byte[], Byte[], PaddingMode) |
Odszyfrowuje dane przy użyciu trybu CBC z określonym trybem uzupełniania. |
DecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode) |
Odszyfrowuje dane przy użyciu trybu CBC z określonym trybem uzupełniania. |
DecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode) |
Odszyfrowuje dane do określonego buforu przy użyciu trybu CBC z określonym trybem uzupełniania. |
DecryptCfb(Byte[], Byte[], PaddingMode, Int32) |
Odszyfrowuje dane przy użyciu trybu CFB z określonym trybem uzupełniania i rozmiarem opinii. |
DecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode, Int32) |
Odszyfrowuje dane przy użyciu trybu CFB z określonym trybem uzupełniania i rozmiarem opinii. |
DecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32) |
Odszyfrowuje dane do określonego buforu przy użyciu trybu CFB z określonym trybem uzupełniania i rozmiarem opinii. |
DecryptEcb(Byte[], PaddingMode) |
Odszyfrowuje dane przy użyciu trybu EBC z określonym trybem uzupełniania. |
DecryptEcb(ReadOnlySpan<Byte>, PaddingMode) |
Odszyfrowuje dane przy użyciu trybu EBC z określonym trybem uzupełniania. |
DecryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode) |
Odszyfrowuje dane do określonego buforu przy użyciu trybu EBC z określonym trybem uzupełniania. |
Dispose() |
Zwalnia wszystkie zasoby używane przez bieżące wystąpienie klasy SymmetricAlgorithm. |
Dispose(Boolean) |
Zwalnia zasoby niezarządzane używane przez element SymmetricAlgorithm i opcjonalnie zwalnia zasoby zarządzane. |
EncryptCbc(Byte[], Byte[], PaddingMode) |
Szyfruje dane przy użyciu trybu CBC z określonym trybem uzupełniania. |
EncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode) |
Szyfruje dane przy użyciu trybu CBC z określonym trybem uzupełniania. |
EncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode) |
Szyfruje dane do określonego buforu przy użyciu trybu CBC z określonym trybem uzupełniania. |
EncryptCfb(Byte[], Byte[], PaddingMode, Int32) |
Szyfruje dane przy użyciu trybu CFB z określonym trybem uzupełniania i rozmiarem opinii. |
EncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode, Int32) |
Szyfruje dane przy użyciu trybu CFB z określonym trybem uzupełniania i rozmiarem opinii. |
EncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32) |
Szyfruje dane do określonego buforu przy użyciu trybu CFB z określonym trybem uzupełniania i rozmiarem opinii. |
EncryptEcb(Byte[], PaddingMode) |
Szyfruje dane przy użyciu trybu EBC z określonym trybem uzupełniania. |
EncryptEcb(ReadOnlySpan<Byte>, PaddingMode) |
Szyfruje dane przy użyciu trybu EBC z określonym trybem uzupełniania. |
EncryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode) |
Szyfruje dane do określonego buforu przy użyciu trybu EBC z określonym trybem uzupełniania. |
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
Finalize() |
Ten element członkowski przesłania element Finalize(), a dokładniejsza dokumentacja może być dostępna w tym temacie. Umożliwia próbę Object zwolnienia zasobów i wykonania innych operacji oczyszczania przed odzyskaniem Object pamięci przez odzyskiwanie pamięci. |
GenerateIV() |
Podczas zastępowania w klasie pochodnej generuje losowy wektor inicjowania (IV) do użycia dla algorytmu. |
GenerateKey() |
Podczas zastępowania w klasie pochodnej generuje losowy klucz (Key) do użycia dla algorytmu. |
GetCiphertextLengthCbc(Int32, PaddingMode) |
Pobiera długość szyfrowania tekstu z danym trybem wypełnienia i długością zwykłego tekstu w trybie CBC. |
GetCiphertextLengthCfb(Int32, PaddingMode, Int32) |
Pobiera długość szyfrowania tekstu z danym trybem wypełnienia i długością zwykłego tekstu w trybie CFB. |
GetCiphertextLengthEcb(Int32, PaddingMode) |
Pobiera długość szyfrowania tekstu z danym trybem wypełnienia i długością zwykłego tekstu w trybie EBC. |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
TryDecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode) |
Próbuje odszyfrować dane do określonego buforu przy użyciu trybu CBC z określonym trybem uzupełniania. |
TryDecryptCbcCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32) |
Po zastąpieniu w klasie pochodnej program próbuje odszyfrować dane do określonego buforu przy użyciu trybu CBC z określonym trybem uzupełniania. |
TryDecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode, Int32) |
Próbuje odszyfrować dane do określonego buforu przy użyciu trybu CFB z określonym trybem uzupełniania i rozmiarem opinii. |
TryDecryptCfbCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32, Int32) |
Po zastąpieniu w klasie pochodnej próbuje odszyfrować dane do określonego buforu przy użyciu trybu CFB z określonym trybem uzupełniania i rozmiarem opinii. |
TryDecryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32) |
Próbuje odszyfrować dane do określonego buforu przy użyciu trybu EBC z określonym trybem uzupełniania. |
TryDecryptEcbCore(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32) |
Podczas zastępowania w klasie pochodnej program próbuje odszyfrować dane do określonego buforu przy użyciu trybu EBC z określonym trybem uzupełniania. |
TryEncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode) |
Próbuje zaszyfrować dane do określonego buforu przy użyciu trybu CBC z określonym trybem uzupełniania. |
TryEncryptCbcCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32) |
Po zastąpieniu w klasie pochodnej próbuje zaszyfrować dane do określonego buforu przy użyciu trybu CBC z określonym trybem uzupełniania. |
TryEncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode, Int32) |
Próbuje zaszyfrować dane w określonym buforze przy użyciu trybu CFB z określonym trybem uzupełniania i rozmiarem opinii. |
TryEncryptCfbCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32, Int32) |
Po zastąpieniu w klasie pochodnej próbuje zaszyfrować dane do określonego buforu przy użyciu trybu CFB z określonym trybem uzupełniania i rozmiarem opinii. |
TryEncryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32) |
Próbuje zaszyfrować dane do określonego buforu przy użyciu trybu EBC z określonym trybem uzupełniania. |
TryEncryptEcbCore(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32) |
Po zastąpieniu w klasie pochodnej program próbuje zaszyfrować dane do określonego buforu przy użyciu trybu EBC z określonym trybem uzupełniania. |
ValidKeySize(Int32) |
Określa, czy określony rozmiar klucza jest prawidłowy dla bieżącego algorytmu. |
Jawne implementacje interfejsu
IDisposable.Dispose() |
Ten interfejs API obsługuje infrastrukturę produktu i nie jest przeznaczony do użycia bezpośrednio z poziomu kodu. Zwalnia zasoby niezarządzane używane przez element SymmetricAlgorithm i opcjonalnie zwalnia zasoby zarządzane. |