Bagikan melalui


SymmetricAlgorithm Kelas

Definisi

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

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.

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 diketahui hanya oleh pengirim dan penerima.

Aes, , DESRC2, 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 ke nol data sensitif apa pun dalam objek sebelum dirilis. Perhatikan bahwa pengumpulan sampah tidak nol dari konten 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

Nama Deskripsi
SymmetricAlgorithm()

Menginisialisasi instans baru dari kelas SymmetricAlgorithm.

Bidang

Nama Deskripsi
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

Nama Deskripsi
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 sandi Umpan Balik Sandi (CFB) dan Umpan Balik Output (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

Nama Deskripsi
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 dalam kelas turunan, membuat objek dekripsi konten 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 dalam 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 yang tidak dikelola yang SymmetricAlgorithm digunakan oleh 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 alih Finalize(), 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 kembali oleh pengumpulan sampah.

GenerateIV()

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

GenerateKey()

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

GetCiphertextLengthCbc(Int32, PaddingMode)

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

GetCiphertextLengthCfb(Int32, PaddingMode, Int32)

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

GetCiphertextLengthEcb(Int32, PaddingMode)

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

GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetType()

Mendapatkan Type instans saat ini.

(Diperoleh dari Object)
MemberwiseClone()

Membuat salinan dangkal dari Objectsaat ini.

(Diperoleh dari Object)
SetKey(ReadOnlySpan<Byte>)

Mengatur kunci untuk instans ini.

SetKeyCore(ReadOnlySpan<Byte>)

Mengatur kunci untuk instans ini.

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 dalam 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)

Ketika ditimpa dalam 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)

Ketika 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 dalam 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 dalam 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 dalam 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

Nama Deskripsi
IDisposable.Dispose()

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

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

Berlaku untuk

Lihat juga