IRONSOFTWAREHOME
AKTUALNOŚCI DLA PROGRAMISTÓW

Usprawnij e-fakturowanie dzięki najnowszej aktualizacji IronPDF: zgodność z PDF/A-3 i obsługa ZUGFeRD

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

Czasami podczas pracy z dokumentami PDF może zaistnieć potrzeba wygenerowania liczb losowych lub losowych ciągów znaków. Niezależnie od tego, czy generujesz losowe liczby i hasła do szyfrowania plików PDF, tworzysz unikalne nazwy plików, unikasz przewidywalnych sekwencji, czy też potrzebujesz generować liczby z jakiegokolwiek innego powodu, użycie klasy RandomNumberGenerator w języku C# może pomóc przenieść Twoje projekty związane z generowaniem i edycją plików PDF na wyższy poziom.

W przeciwieństwie do podstawowego obiektu losowego utworzonego z klasy Random, ten kryptograficzny generator liczb losowych generuje wartości losowe o wysokim poziomie bezpieczeństwa kryptograficznego, odpowiednie do operacji kryptograficznych w bezpiecznych aplikacjach.

W tym artykułe omówimy:

  • Czym jest RandomNumberGenerator i dlaczego ma znaczenie.

  • Jak używać kryptograficznego generatora liczb losowych w języku C# do generowania liczb losowych, losowych ciągów znaków i innych danych losowych do celów kryptograficznych.

  • Praktyczne przykłady integracji RandomNumberGenerator z IronPDF w celu tworzenia bezpiecznych, unikalnych plików PDF przy użyciu wygenerowanych liczb i ciągów znaków.

  • Wskazówki i najlepsze praktyki pozwalające zwiększyć bezpieczeństwo i profesjonalizm aplikacji PDF.

Czym jest klasa RandomNumberGenerator

Zanim zagłębimy się w integrację z IronPDF, przypomnijmy sobie pokrótce, co sprawia, że RandomNumberGenerator jest wyjątkowy.

  • Jest to część przestrzeni nazw System.Security.Cryptography.

  • Generuje kryptograficznie silne wartości losowe jako losowe bajty, znacznie bardziej bezpieczne niż typowa klasa Random.

  • Jest to idealne rozwiązanie w sytuacjach wymagających nieprzewidywalności, takich jak generowanie bezpiecznych tokenów, kluczy, saltów i unikalnych identyfikatorów.

  • Wykorzystuje algorytmy kryptograficzne, takie jak AES-CTR DRBG, Fortuna lub generatory liczb losowych CSPRNG dostarczane przez system operacyjny. Uodpornienie go na przewidywania.

  • Najlepiej sprawdza się w zadaniach takich jak tworzenie kluczy kryptograficznych, generowanie haseł, bezpieczne tokeny, unikalne identyfikatory dokumentów.

Ta zaleta wynika z wykorzystania bezpiecznych generatorów liczb losowych wbudowanych w system operacyjny, co sprawia, że jest on odporny na ataki polegające na przewidywaniu lub inżynierii odwrotnej. W przeciwieństwie do generatorów liczb pseudolosowych, które mogą generować tę samą sekwencję z tą samą wartością ziarna, ta klasa jest zaprojektowana do prawdziwej losowości i celów kryptograficznych.

Dlaczego używać RandomNumberGenerator zamiast klasy Random w C#?

Wielu programistów zaczyna od klasy Random w języku C# do generowania losowych liczb całkowitych, ale nie jest ona przeznaczona do scenariuszy wymagających wysokiego poziomu bezpieczeństwa. Wyniki mogą być przewidywalne, zwłaszcza jeśli używana jest ta sama wartość początkowa lub czas systemowy, co oznacza, że wygenerowane liczby można odgadnąć. Dzieje się tak, ponieważ metoda generuje wartości przy użyciu prostych operacji arytmetyki modułowej, które mogą się powtarzać przy tych samych danych wejściowych.

Natomiast RandomNumberGenerator generuje prawdziwie losowe liczby, pochodzące z kryptograficznych generatorów liczb losowych w .NET Framework lub w systemie operacyjnym. Zapewnia to brak stronniczości wynikającej z niskiej wartości i często wykorzystuje strategię odrzucania i ponownej próby w celu utrzymania jednolitego rozkładu między dolną granicą (np. int minValue) a wyłączną górną granicą (np. int maxValue). Poniższa ilustracja pokazuje różnicę między słabym generatorem liczb losowych (RNG) a bezpiecznym.

"Weak" vs. Secure RNG

Dlaczego warto używać RandomNumberGenerator z IronPDF

IronPDF to solidna biblioteka .NET do obsługi plików PDF, umożliwiająca programistom tworzenie, edycję i zabezpieczanie dokumentów PDF. Typowe przypadki użycia, w których losowość ma znaczenie, obejmują:

  • Unikalne identyfikatory dokumentów: Dołączaj do plików PDF kryptograficznie zabezpieczone identyfikatory w celu śledzenia lub weryfikacji.

  • Zabezpieczone znaki wodne: Osadzaj losowe znaki wodne lub kody, które zapobiegają fałszerstwom.

  • Klucze szyfrujące lub hasła: Generuj bezpieczne klucze lub hasła do szyfrowania plików PDF.

  • Random Content: Dodaj losowe unikalne tokeny lub sole do dokumentów PDF w celu weryfikacji integralności.

Jak generować bezpieczne dane losowe w C#

Oto prosty przykład generowania bezpiecznego losowego tokenu 128-bitowego (16-bajtowego).

using System;
using System.Security.Cryptography;

public static string GenerateSecureToken(int size = 16)
{
    byte[] randomBytes = new byte[size];
    RandomNumberGenerator.Fill(randomBytes);
    return Convert.ToBase64String(randomBytes);
}

Ta metoda tworzy bezpieczną tablicę bajtów i zwraca ją jako ciąg znaków Base64 — idealny do osadzania lub śledzenia w testach jednostkowych, nazwach plików lub bezpiecznych identyfikatorach.

Praktyczny przykład: Dodawanie unikalnych identyfikatorów dokumentów do plików PDF

Połączmy możliwości RandomNumberGenerator i IronPDF, aby wygenerować plik PDF z unikalnym, bezpiecznym identyfikatorem dokumentu umieszczonym na każdej stronie.

Krok 1: Wygeneruj bezpieczny identyfikator dokumentu

string GenerateDocumentId()
{
    byte[] idBytes = new byte[12]; // 96-bit ID
    RandomNumberGenerator.Fill(idBytes);
    return BitConverter.ToString(idBytes).Replace("-", "");
}

To generuje 24-znakowy losowy ciąg hex (np. "4F3A2C9B7D1E8F0A5B6C7D8E").

Krok 2: Utwórz plik PDF i umieść na nim identyfikator

using IronPdf;

void CreatePdfWithSecureId()
{
    var documentId = GenerateDocumentId();

    var renderer = new ChromePdfRenderer();

    // Add a custom footer with the document ID
    renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
    {
        HtmlFragment = $"<div style='text-align: center; font-size: 10px;'>Document ID: {documentId} - Generated on {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss} UTC</div>",
        DrawDividerLine = true,
    };
    var pdf = renderer.RenderHtmlAsPdf($"<h1>Secure Document</h1><p>Document ID: {documentId}</p>");

    string outputPath = $"SecurePdf_{documentId}.pdf";
    pdf.SaveAs(outputPath);

    Console.WriteLine($"PDF saved as {outputPath}");
}What this Code Does:
  • Generuje losową liczbę, która służy jako unikalny identyfikator dokumentu, zabezpieczony kryptograficznie.

  • Renderuje osadzenie HTML do PDF, które identyfikuje ten identyfikator.

  • Dodaje stopkę na każdej stronie z identyfikatorem dokumentu i sygnaturą czasową.

  • Zapisuje plik PDF, wykorzystując identyfikator w nazwie pliku, co ułatwia śledzenie.

Przykład pełnego działającego kodu

using IronPdf;
using IronPdf.Editing;
using System;
using System.Security.Cryptography;

class Program
{
    public static void Main(string[] args)
    {
        // Create an instance of Program to run non-static methods
        var program = new Program();
        program.CreatePdfWithSecureId()
    }

    string GenerateDocumentId()
    {
        byte[] idBytes = new byte[12]; // 96-bit ID
        RandomNumberGenerator.Fill(idBytes);
        return BitConverter.ToString(idBytes).Replace("-", "");
    }

    void CreatePdfWithSecureId()
    {
        var documentId = GenerateDocumentId();

        var renderer = new ChromePdfRenderer();
        // Add a custom footer with the document ID
        renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
        {
            HtmlFragment = $"<div style='text-align: center; font-size: 10px;'>Document ID: {documentId} - Generated on {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss} UTC</div>",
            DrawDividerLine = true,
        };
        var pdf = renderer.RenderHtmlAsPdf($"<h1>Secure Document</h1><p>Document ID: {documentId}</p>");

        string outputPath = $"SecurePdf_{documentId}.pdf";
        pdf.SaveAs(outputPath);

        Console.WriteLine($"PDF saved as {outputPath}");
    }
}

Wynik

PDF z identyfikatorem dokumentu

Zaawansowany przypadek użycia: bezpieczne szyfrowanie plików PDF za pomocą losowych kluczy

IronPDF wspiera szyfrowanie PDF, zapewniając silne wsparcie do tworzenia bezpiecznych PDF. Możesz użyć RandomNumberGenerator do tworzenia silnych haseł lub kluczy do szyfrowania:

using IronPdf;
using IronPdf.Editing;
using System;
using System.Security.Cryptography;

class Program
{
    public static void Main(string[] args)
    {
        // Create an instance of Program to run non-static methods
        var program = new Program();
        program.CreateEncryptedPdf();
    }

    string GenerateSecurePassword(int length = 12)
    {
        const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()";
        byte[] data = new byte[length];
        RandomNumberGenerator.Fill(data);

        char[] result = new char[length];
        for (int i = 0; i < length; i++)
        {
            result[i] = chars[data[i] % chars.Length];
        }
        return new string(result);
    }

    void CreateEncryptedPdf()
    {
        string password = GenerateSecurePassword();

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential PDF</h1><p>Access is restricted.</p>");

        // Set security settings
        pdf.SecuritySettings.UserPassword = password;
        pdf.SecuritySettings.AllowUserAnnotations = false;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;
        pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;

        string filePath = "EncryptedSecurePdf.pdf";
        pdf.SaveAs(filePath);

        Console.WriteLine($"Encrypted PDF saved to {filePath} with password: {password}");
    }
}

Ta metoda używa domyślnej implementacji z RNG systemu operacyjnego, generując hasło odpowiednie do operacji kryptograficznych.

Spowoduje to zastosowanie wygenerowanego bezpiecznego hasła, dzięki czemu tylko użytkownicy posiadający dostęp do haseł będą mogli wyświetlić dokument.

Wyskakujące okienko ochrony hasłem

Dodatkowo, będziemy mieli zaszyfrowany, bezpieczny dokument z naszymi ustawionymi uprawnieniami:

Ustawienia zaszyfrowanego PDF

Najlepsze praktyki i wskazówki

  • Zawsze używaj RandomNumberGenerator do wszystkiego, co dotyczy bezpieczeństwa. Należy unikać losowych wartości dla identyfikatorów, tokenów lub haseł.

  • Nie umieszczaj danych wrażliwych w logach ani komunikatach wyświetlanych użytkownikom, ale rejestruj wystarczającą ilość informacji, aby umożliwić śledzenie i audyt.

  • Aby zapewnić lepszą identyfikowalność, warto rozważyć użycie znaczników czasu i innych metadanych wraz z losowymi identyfikatorami.

  • Wykorzystaj wbudowane funkcje zabezpieczeń IronPDF w połączeniu z losowymi kluczami, aby chronić swoje dokumenty.

  • Sprawdź długość losowych danych i ich kodowanie, aby zapewnić ich użyteczność w danym kontekście (np. nazwy plików, adresy URL, BARCODES).

Podsumowanie

Zintegrowanie klasy RandomNumberGenerator języka C# z IronPDF pozwala generować bezpieczne, unikalne pliki PDF, które spełniają współczesne standardy bezpieczeństwa. Niezależnie od tego, czy stemplujesz unikalne identyfikatory, generujesz klucze szyfrowania czy osadzasz zabezpieczone tokeny, ta metoda pomaga ci:

  • Zapobieganie fałszowaniu dokumentów

  • Poprawa identyfikowalności

  • Zabezpiecz poufne dane w plikach PDF

Dzięki połączeniu siły kryptograficznej tej klasy z wszechstronnymi narzędziami PDF firmy IronPDF Twoje rozwiązania PDF staną się bezpieczniejsze i bardziej profesjonalne.

Spróbuj sam!

Chcesz zwiększyć bezpieczeństwo swoich plików PDF? Wypróbuj bezpłatną wersję próbną IronPDF i już dziś zacznij eksperymentować z bezpiecznymi danymi losowymi!

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