Share via


SymmetricAlgorithm Kelas

Definisi

Mewakili kelas dasar abstrak dari mana semua implementasi algoritma simetris harus diwarisi.

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
Warisan
SymmetricAlgorithm
Turunan
Atribut
Penerapan

Contoh

Contoh kode berikut menggunakan kelas dengan properti dan vektor inisialisasi Aes yang ditentukan Key (IV) untuk mengenkripsi file yang ditentukan oleh inName, dan menghasilkan hasil terenkripsi ke file yang ditentukan oleh outName. Parameter desKey dan desIV untuk metode ini adalah array 8-byte. Anda harus menginstal paket enkripsi tinggi untuk menjalankan contoh ini.

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

Keterangan

Kelas yang berasal dari SymmetricAlgorithm kelas menggunakan mode penautan yang disebut rantai blok sandi (CBC), yang memerlukan kunci (Key) dan vektor inisialisasi (IV) untuk melakukan transformasi kriptografi pada data. Untuk mendekripsi data yang dienkripsi menggunakan salah SymmetricAlgorithm satu kelas, Anda harus mengatur Key properti dan IV properti ke nilai yang sama yang digunakan untuk enkripsi. Agar algoritma simetris berguna, kunci rahasia harus hanya diketahui oleh pengirim dan penerima.

Aes, DES, RC2, dan TripleDES adalah implementasi algoritma simetris.

Perhatikan bahwa saat menggunakan kelas turunan, itu tidak cukup, dari perspektif keamanan, untuk hanya memaksa pengumpulan sampah setelah Anda selesai menggunakan objek . Anda harus secara eksplisit memanggil Clear metode pada objek untuk nol data sensitif apa pun dalam objek sebelum dirilis. Perhatikan bahwa pengumpulan sampah tidak mengeluarkan isi objek yang dikumpulkan tetapi hanya menandai memori sebagai tersedia untuk realokasi. Dengan demikian data yang terkandung dalam objek yang dikumpulkan sampah mungkin masih ada dalam tumpukan memori dalam memori yang tidak dialokasikan. Dalam kasus objek kriptografi, data ini dapat berisi informasi sensitif seperti data kunci atau blok teks biasa.

Semua kelas kriptografi dalam .NET Framework yang menyimpan data sensitif menerapkan Clear metode . Ketika dipanggil Clear , metode ini menimpa semua data sensitif dalam objek dengan nol dan kemudian melepaskan objek sehingga dapat dikumpulkan dengan aman. Ketika objek telah di-nol dan dirilis, Anda kemudian harus memanggil Dispose metode dengan parameter yang disposing diatur ke True untuk membuang semua sumber daya terkelola dan tidak terkelola yang terkait dengan objek.

Catatan Bagi Implementer

Ketika Anda mewarisi dari SymmetricAlgorithm kelas , Anda harus mengambil alih anggota berikut: CreateDecryptor(Byte[], Byte[]), , CreateEncryptor(Byte[], Byte[])GenerateIV(), dan GenerateKey().

Konstruktor

SymmetricAlgorithm()

Menginisialisasi instans baru kelas SymmetricAlgorithm.

Bidang

BlockSizeValue

Mewakili ukuran blok, dalam bit, dari operasi kriptografi.

FeedbackSizeValue

Mewakili ukuran umpan balik, dalam bit, dari operasi kriptografi.

IVValue

Mewakili vektor inisialisasi (IV) untuk algoritma simetris.

KeySizeValue

Mewakili ukuran, dalam bit, dari kunci rahasia yang digunakan oleh algoritma simetris.

KeyValue

Mewakili kunci rahasia untuk algoritma simetris.

LegalBlockSizesValue

Menentukan ukuran blok, dalam bit, yang didukung oleh algoritma simetris.

LegalKeySizesValue

Menentukan ukuran kunci, dalam bit, yang didukung oleh algoritma simetris.

ModeValue

Mewakili mode sandi yang digunakan dalam algoritma simetris.

PaddingValue

Mewakili mode padding yang digunakan dalam algoritma simetris.

Properti

BlockSize

Mendapatkan atau mengatur ukuran blok, dalam bit, dari operasi kriptografi.

FeedbackSize

Mendapatkan atau mengatur ukuran umpan balik, dalam bit, dari operasi kriptografi untuk mode cipher Feedback (CFB) dan Output Feedback (OFB).

IV

Mendapatkan atau mengatur vektor inisialisasi (IV) untuk algoritma simetris.

Key

Mendapatkan atau mengatur kunci rahasia untuk algoritma simetris.

KeySize

Mendapatkan atau mengatur ukuran, dalam bit, dari kunci rahasia yang digunakan oleh algoritma simetris.

LegalBlockSizes

Mendapatkan ukuran blok, dalam bit, yang didukung oleh algoritma simetris.

LegalKeySizes

Mendapatkan ukuran kunci, dalam bit, yang didukung oleh algoritma simetris.

Mode

Mendapatkan atau mengatur mode untuk pengoperasian algoritma simetris.

Padding

Mendapatkan atau mengatur mode padding yang digunakan dalam algoritma simetris.

Metode

Clear()

Merilis semua sumber daya yang SymmetricAlgorithm digunakan oleh kelas .

Create()
Kedaluwarsa.
Kedaluwarsa.

Membuat objek kriptografi default yang digunakan untuk melakukan algoritma simetris.

Create(String)
Kedaluwarsa.

Membuat objek kriptografi yang ditentukan yang digunakan untuk melakukan algoritma simetris.

CreateDecryptor()

Membuat objek dekripsi simetris dengan properti saat ini Key dan vektor inisialisasi (IV).

CreateDecryptor(Byte[], Byte[])

Ketika ditimpa di kelas turunan, membuat objek dekripsi simetris dengan properti dan vektor inisialisasi yang ditentukan Key (IV).

CreateEncryptor()

Membuat objek enkripsi simetris dengan properti saat ini Key dan vektor inisialisasi (IV).

CreateEncryptor(Byte[], Byte[])

Saat ditimpa di kelas turunan, membuat objek enkripsi simetris dengan properti dan vektor inisialisasi yang ditentukan Key (IV).

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

Mendekripsi data menggunakan mode CBC dengan mode padding yang ditentukan.

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

Mendekripsi data menggunakan mode CBC dengan mode padding yang ditentukan.

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

Mendekripsi data ke dalam buffer yang ditentukan, menggunakan mode CBC dengan mode padding yang ditentukan.

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

Mendekripsi data menggunakan mode CFB dengan mode padding dan ukuran umpan balik yang ditentukan.

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

Mendekripsi data menggunakan mode CFB dengan mode padding dan ukuran umpan balik yang ditentukan.

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

Mendekripsi data ke dalam buffer yang ditentukan, menggunakan mode CFB dengan mode padding dan ukuran umpan balik yang ditentukan.

DecryptEcb(Byte[], PaddingMode)

Mendekripsi data menggunakan mode ECB dengan mode padding yang ditentukan.

DecryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Mendekripsi data menggunakan mode ECB dengan mode padding yang ditentukan.

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

Mendekripsi data ke dalam buffer yang ditentukan, menggunakan mode ECB dengan mode padding yang ditentukan.

Dispose()

Merilis semua sumber daya yang digunakan oleh instans SymmetricAlgorithm kelas saat ini.

Dispose(Boolean)

Merilis sumber daya tidak terkelola yang digunakan oleh SymmetricAlgorithm dan secara opsional merilis sumber daya terkelola.

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

Mengenkripsi data menggunakan mode CBC dengan mode padding yang ditentukan.

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

Mengenkripsi data menggunakan mode CBC dengan mode padding yang ditentukan.

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

Mengenkripsi data ke dalam buffer yang ditentukan, menggunakan mode CBC dengan mode padding yang ditentukan.

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

Mengenkripsi data menggunakan mode CFB dengan mode padding dan ukuran umpan balik yang ditentukan.

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

Mengenkripsi data menggunakan mode CFB dengan mode padding dan ukuran umpan balik yang ditentukan.

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

Mengenkripsi data ke dalam buffer yang ditentukan, menggunakan mode CFB dengan mode padding dan ukuran umpan balik yang ditentukan.

EncryptEcb(Byte[], PaddingMode)

Mengenkripsi data menggunakan mode ECB dengan mode padding yang ditentukan.

EncryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Mengenkripsi data menggunakan mode ECB dengan mode padding yang ditentukan.

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

Mengenkripsi data ke dalam buffer yang ditentukan, menggunakan mode ECB dengan mode padding yang ditentukan.

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
Finalize()

Anggota ini mengambil Finalize()alih , dan dokumentasi yang lebih lengkap mungkin tersedia dalam topik tersebut.

Object Memungkinkan upaya untuk membebaskan sumber daya dan melakukan operasi pembersihan lainnya sebelum Object direklamasi oleh pengumpulan sampah.

GenerateIV()

Ketika ditimpa dalam kelas turunan, menghasilkan vektor inisialisasi acak (IV) untuk digunakan untuk algoritma.

GenerateKey()

Ketika ditimpa di kelas turunan, menghasilkan kunci acak (Key) untuk digunakan untuk algoritma.

GetCiphertextLengthCbc(Int32, PaddingMode)

Mendapatkan panjang ciphertext dengan mode padding dan panjang teks biasa tertentu dalam mode CBC.

GetCiphertextLengthCfb(Int32, PaddingMode, Int32)

Mendapatkan panjang ciphertext dengan mode padding dan panjang teks biasa tertentu dalam mode CFB.

GetCiphertextLengthEcb(Int32, PaddingMode)

Mendapatkan panjang ciphertext dengan mode padding dan panjang teks biasa tertentu dalam mode ECB.

GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetType()

Mendapatkan dari instans Type saat ini.

(Diperoleh dari Object)
MemberwiseClone()

Membuat salinan dangkal dari saat ini Object.

(Diperoleh dari Object)
ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)
TryDecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode)

Mencoba mendekripsi data ke dalam buffer yang ditentukan, menggunakan mode CBC dengan mode padding yang ditentukan.

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

Ketika ditimpa di kelas turunan, mencoba mendekripsi data ke dalam buffer yang ditentukan, menggunakan mode CBC dengan mode padding yang ditentukan.

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

Mencoba mendekripsi data ke dalam buffer yang ditentukan, menggunakan mode CFB dengan mode padding dan ukuran umpan balik yang ditentukan.

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

Saat ditimpa di kelas turunan, mencoba mendekripsi data ke dalam buffer yang ditentukan, menggunakan mode CFB dengan mode padding dan ukuran umpan balik yang ditentukan.

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

Mencoba mendekripsi data ke dalam buffer yang ditentukan, menggunakan mode ECB dengan mode padding yang ditentukan.

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

Saat ditimpa dalam kelas turunan, mencoba mendekripsi data ke dalam buffer yang ditentukan, menggunakan mode ECB dengan mode padding yang ditentukan.

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

Mencoba mengenkripsi data ke dalam buffer yang ditentukan, menggunakan mode CBC dengan mode padding yang ditentukan.

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

Saat ditimpa di kelas turunan, mencoba mengenkripsi data ke dalam buffer yang ditentukan, menggunakan mode CBC dengan mode padding yang ditentukan.

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

Mencoba mengenkripsi data ke dalam buffer yang ditentukan, menggunakan mode CFB dengan mode padding dan ukuran umpan balik yang ditentukan.

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

Saat ditimpa di kelas turunan, mencoba mengenkripsi data ke dalam buffer yang ditentukan, menggunakan mode CFB dengan mode padding dan ukuran umpan balik yang ditentukan.

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

Mencoba mengenkripsi data ke dalam buffer yang ditentukan, menggunakan mode ECB dengan mode padding yang ditentukan.

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

Saat ditimpa di kelas turunan, mencoba mengenkripsi data ke dalam buffer yang ditentukan, menggunakan mode ECB dengan mode padding yang ditentukan.

ValidKeySize(Int32)

Menentukan apakah ukuran kunci yang ditentukan valid untuk algoritma saat ini.

Implementasi Antarmuka Eksplisit

IDisposable.Dispose()

API ini mendukung infrastruktur produk dan tidak dimaksudkan untuk digunakan langsung dari kode Anda.

Merilis sumber daya tidak terkelola yang digunakan oleh SymmetricAlgorithm dan secara opsional merilis sumber daya terkelola.

Berlaku untuk

Lihat juga