IRONSOFTWAREHOME
AKTUALNOŚCI DLA PROGRAMISTÓW

C# Szyfrowanie AES (Jak to działa dla programistów)

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Jacob Mellor
Updated: 21 kwietnia 2026

AES (Zaawansowany Standard Szyfrowania) jest jednym z najczęściej używanych algorytmów szyfrowania symetrycznego. Używa tego samego klucza do szyfrowania i deszyfrowania danych, co sprawia, że szyfrowanie AES jest wydajne i szybkie w zabezpieczaniu wrażliwych danych w wielu aplikacjach.

Ten samouczek skupi się na szyfrowaniu AES w C#, używając klasy AES do szyfrowania i deszyfrowania danych oraz biblioteki IronPDF. Omówimy praktyczne przykłady, przejdziemy przez proces szyfrowania i zobaczymy, jak używać trybu Cipher Block Chaining (CBC) w celu zwiększenia bezpieczeństwa. Przeanalizujemy także zarządzanie kluczami szyfrowania oraz rolę wektóra inicjującego (IV).

Introduction of AES Encryption in C#

Zaawansowany Standard Szyfrowania (AES) to symetryczny algorytm szyfrowania, standaryzowany przez National Institute of Standards and Technology (NIST). Algorytm może mieć rozmiary klucza 128, 192 lub 256 bitów i jest wysokozabezpieczający dla szyfrowania poufnych danych. Używa tego samego klucza szyfrowania do szyfrowania i deszyfrowania danych.

AES działa przez podział oryginalnych danych na bloki i stosowanie transformacji na tych blokach. Działa w różnych trybach szyfrowania, takich jak CBC (Cipher Block Chaining) i Electronic CodeBook (ECB), z których każdy oferuje różne funkcje bezpieczeństwa.

How AES Works in C#

Algorytm szyfrowania AES w C# jest częścią przestrzeni nazw System.Security.Cryptography. Ta przestrzeń nazw zawiera klasę AES, która umożliwia stworzenie instancji AES, określenie rozmiaru klucza, trybu szyfrowania i trybu paddingu, a następnie szyfrowanie i deszyfrowanie danych przy użyciu tajnego klucza.

Aby korzystać z AES w C#, postępuj zgodnie z następującymi krokami:

  1. Utwórz instancję klasy AES używając Aes.Create().
  2. Ustaw klucz, IV i inne odpowiednie parametry, takie jak tryb szyfrowania.
  3. Zaszyfruj dane za pomocą interfejsu ICryptoTransform i zapisz je do MemoryStream.
  4. Odszyfruj dane używając tego samego klucza i IV.

Stwórzmy podstawowy proces szyfrowania i program deszyfrujący w C#.

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

class Program
{
    // Declare a static byte array for encrypted data
    public static byte[] encryptedData;

    // Main method to demonstrate encryption and decryption
    public static void Main(string[] args)
    {
        // String plaintext to be encrypted
        string plaintext = "This is some sensitive data!";
        string key = "abcdefghijklmnop"; // 128-bit key (16 characters)

        // Encrypt the plaintext
        string ciphertext = Encrypt(plaintext, key);
        Console.WriteLine("Encrypted Data: " + ciphertext);

        // Decrypt the ciphertext
        string decryptedData = Decrypt(ciphertext, key);
        Console.WriteLine("Decrypted Data: " + decryptedData);
    }

    // Method to encrypt data
    public static string Encrypt(string plaintext, string key)
    {
        // Create a new instance of the AES encryption algorithm
        using (Aes aes = Aes.Create())
        {
            aes.Key = Encoding.UTF8.GetBytes(key);
            aes.IV = new byte[16]; // Initialization vector (IV)

            // Create an encryptor to perform the stream transform
            ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);

            // Create the streams used for encryption
            using (MemoryStream ms = new MemoryStream())
            {
                // Create a CryptoStream using the encryptor
                using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                {
                    using (StreamWriter sw = new StreamWriter(cs))
                    {
                        sw.Write(plaintext);
                    }
                }
                // Store the encrypted data in the public static byte array
                encryptedData = ms.ToArray();
                return Convert.ToBase64String(encryptedData);
            }
        }
    }

    // Method to decrypt data
    public static string Decrypt(string ciphertext, string key)
    {
        using (Aes aes = Aes.Create())
        {
            aes.Key = Encoding.UTF8.GetBytes(key);
            aes.IV = new byte[16]; // Initialization vector (IV)

            // Create a decryptor to perform the stream transform
            ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);

            // Create the streams used for decryption
            using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(ciphertext)))
            {
                using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader sr = new StreamReader(cs))
                    {
                        return sr.ReadToEnd();
                    }
                }
            }
        }
    }
}

Szyfrowanie AES w C# (jak to działa dla deweloperów): Rysunek 1 - Wynik szyfrowania i deszyfrowania przy użyciu strumienia pamięci

Wyjaśnienie kodu

  1. Aes.Create(): Tworzy nową instancję algorytmu szyfrowania AES.
  2. aes.Key: Klucz używany zarówno do szyfrowania, jak i deszyfrowania. Musi mieć odpowiedni rozmiar, taki jak 128 bitów (16 bajtów), 192 bity lub 256 bitów.
  3. aes.IV: Wektor inicjalizacyjny (IV), jest używany do losowania procesu szyfrowania. W tym przykładzie używamy IV z zerami dla uproszczenia.
  4. MemoryStream: Umożliwia pracę z zaszyfrowanymi danymi jako strumienie bajtów.
  5. CryptoStream: Przekształca strumień danych (szyfrowanie lub deszyfrowanie).

Zaawansowany przykład: Szyfrowanie AES z Własnym Kluczem i IV

Rozbudujmy poprzedni przykład przez wygenerowanie losowego klucza i IV, co zwiększa bezpieczeństwo szyfrowania.

public static string EncryptData(string plaintext)
{
    using (Aes aes = Aes.Create())
    {
        aes.Key = new byte[32]; // AES-256 requires a 256-bit key (32 bytes)
        aes.IV = new byte[16];  // 128-bit block size

        // Randomly generate key and IV
        using (RandomNumberGenerator rng = RandomNumberGenerator.Create())
        {
            rng.GetBytes(aes.Key); // Generate a random key
            rng.GetBytes(aes.IV);  // Generate a random IV
        }

        // Create an encryptor to perform the stream transform
        ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);

        // Create the streams used for encryption
        using (MemoryStream ms = new MemoryStream())
        {
            using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
            {
                using (StreamWriter sw = new StreamWriter(cs))
                {
                    sw.Write(plaintext);
                }
            }
            return Convert.ToBase64String(ms.ToArray());
        }
    }
}

W tym przypadku generujemy nowy klucz i IV za każdym razem, gdy funkcja jest wywoływana. To zapewnia bardziej solidne szyfrowanie, ponieważ ten sam klucz nie jest używany w każdej operacji. AES obsługuje rozmiary kluczy, takie jak 128, 192 i 256 bitów.

Deszyfrowanie Danych za Pomocą AES

Deszyfrowanie to proces przeciwny do szyfrowania danych. W naszych przykładach, ten sam klucz i IV używane do szyfrowania muszą być dostarczone, aby odszyfrować dane. Proces deszyfrowania polega na konwersji zaszyfrowanych danych z powrotem do ich oryginalnej formy.

Oto przykład używający wcześniej zaszyfrowanych danych:

public static string DecryptData(string ciphertext, byte[] key, byte[] iv)
{
    using (Aes aes = Aes.Create())
    {
        aes.Key = key;
        aes.IV = iv;

        // Create a decryptor to perform the stream transform
        ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);

        // Create the streams used for decryption
        using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(ciphertext)))
        {
            using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
            {
                using (StreamReader sr = new StreamReader(cs))
                {
                    return sr.ReadToEnd();
                }
            }
        }
    }
}

Ten kod deszyfruje zaszyfrowane dane z powrotem do oryginalnych danych.

IronPDF z Szyfrowaniem AES

IronPDF to prosta i przyjazna dla deweloperów biblioteka .NET zaprojektowana do generowania, edytowania i manipulowania PDF-ami za pomocą prostego kodu C#. Pozwala deweloperom tworzyć dokumenty PDF bezpośrednio z HTML, CSS i JavaScript, co może być niezwykle przydatne przy dynamicznie generowanych raportach, fakturach lub innych dokumentach. Dzięki wsparciu dla łączenia, dzielenia, a nawet dodawania funkcji bezpieczeństwa, takich jak hasła lub podpisy cyfrowe, IronPDF to kompleksowe rozwiązanie dla generowania PDF w aplikacjach .NET.

Integracja IronPDF z Szyfrowaniem AES

Szyfrowanie AES w C# (jak to działa dla deweloperów): Rysunek 2 - IronPDF

Gdy generujesz poufne raporty lub dokumenty, możesz potrzebować zapewnić, że dane zawarte w tych PDF-ach są zaszyfrowane przed udostępnieniem. Szyfrowanie AES (Zaawansowany Standard Szyfrowania) to doskonałe rozwiązanie do bezpiecznego szyfrowania zawartości plików PDF. Łącząc IronPDF i szyfrowanie AES, możesz chronić dane w swoich PDF-ach, zachowując jednocześnie możliwość pracy z samym dokumentem.

Krok 1: Tworzenie PDF za Pomocą IronPDF

Użyj klasy ChromePdfRenderer do wygenerowania PDF z zawartości HTML i zapisz go do pliku:

var htmlContent = "<h1>Confidential</h1><p>This is sensitive data.</p>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs(@"C:\Reports\ConfidentialReport.pdf");

Krok 2: Szyfrowanie PDF za Pomocą AES

Po utworzeniu PDF zaszyfruj go za pomocą AES:

byte[] pdfBytes = File.ReadAllBytes(@"C:\Reports\ConfidentialReport.pdf");
using (Aes aes = Aes.Create())
{
    aes.Key = Encoding.UTF8.GetBytes("abcdefghijklmnop");
    aes.IV = new byte[16];
    using (var encryptor = aes.CreateEncryptor(aes.Key, aes.IV))
    using (var ms = new MemoryStream())
    {
        using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
        {
            cs.Write(pdfBytes, 0, pdfBytes.Length);
        }
        File.WriteAllBytes(@"C:\Reports\ConfidentialReport.encrypted", ms.ToArray());
    }
}

Wnioski

Szyfrowanie AES w C# (jak to działa dla deweloperów): Rysunek 3 - Licencjonowanie

Integracja IronPDF z szyfrowaniem AES pozwala na generowanie dynamicznych, bezpiecznych dokumentów, które są zarówno dostępne, jak i zaszyfrowane. Niezależnie od tego, czy rozwijasz aplikacje wymagające bezpiecznego generowania dokumentów, czy zarządzasz poufnymi raportami, połączenie IronPDF z solidnym szyfrowaniem chroni Twoje dane. IronPDF upraszcza pracę z PDF-ami, podczas gdy AES gwarantuje, że zawartość pozostaje bezpieczna.

IronPDF oferuje bezpłatny okres próbny, co ułatwia deweloperom sprawdzenie jego funkcji przed podjęciem decyzji. Jeśli jesteś gotowy do wdrożenia IronPDF w swoich projektach, licencje zaczynają się od $999 jako jednorazowy zakup.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczącą ponad 50 osób, obsługującą NASA, Teslę i światowe agencje rządowe.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta