
BouncyCastle C# (jak to działa dla programistów)
BouncyCastle C# to kompleksowa biblioteka oferująca szeroki wybór algorytmów kryptograficznych i narzędzi dla programistów .NET. Niniejszy przewodnik ma na celu wprowadzenie początkujących do podstaw Bouncy Castle, podkreślając jego możliwości jako dostawcy zabezpieczeń i oferując praktyczne przykłady do codziennego użytku. Nauczymy się także, jak możemy go używać z IronPDF .NET PDF Library.
Wprowadzenie do Bouncy Castle
Bouncy Castle wyróżnia się jako potężna i wszechstronna biblioteka w obszarze zabezpieczeń kryptograficznych. Jest to zarejestrowany australijski projekt charytatywny, który ma na celu dostarczanie wysokiej jakości usług zabezpieczeń dla Java i C#. Biblioteka jest utrzymywana na licencji opartej na MIT X Consortium License, co zachęca do szerokiego użycia i wkładu.
Zrozumienie celu Bouncy Castle
Bouncy Castle pełni rolę dostawcy zabezpieczeń, oferując szeroką gamę algorytmów kryptograficznych. Jego wszechstronność pozwala na zaspokojenie różnych potrzeb związanych z bezpieczeństwem, od podstawowego szyfrowania po skomplikowane podpisy cyfrowe. Jako początkujący, zrozumienie zakresu Bouncy Castle jest kluczowe dla skutecznego wdrożenia go w projektach.
Getting Started with Bouncy Castle in C#
Implementacja Bouncy Castle w C# zaczyna się od skonfigurowania środowiska i zrozumienia jego podstawowych komponentów.
Konfiguracja
Pobierz bibliotekę: Aby rozpocząć, pobierz najnowszą wersję pakietu Bouncy Castle z jego oficjalnej strony Bouncy Castle. Upewnij się, że wybierasz odpowiednią wersję odpowiadającą potrzebom twojego projektu.
Zintegrowanie z projektem: Po pobraniu, zintegrować Bouncy Castle z projektem C#. Zwykle obejmuje to dodanie biblioteki jako referencji w ustawieniach projektu.
Możesz także pobrać i zainstalować ją za pomocą Menedżera Pakietów NuGet, wyszukując "Bouncycastle" w pasku wyszukiwania Menedżera Pakietów NuGet.

Przykład podstawowego szyfrowania
W tym przykładzie zaprezentuję prosty scenariusz szyfrowania przy użyciu AES (Advanced Encryption Standard) z Bouncy Castle w C#.
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Modes;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Security;
using System.Text;
public class SimpleEncryption
{
/// <summary>
/// Encrypts data using AES encryption with a given password.
/// </summary>
/// <param name="message">The message to encrypt.</param>
/// <param name="password">The password for key derivation.</param>
/// <returns>The encrypted message as a byte array.</returns>
public static byte[] EncryptData(string message, string password)
{
// Generate a random salt
var salt = new byte[8];
new SecureRandom().NextBytes(salt);
// Derive key and IV from the password and salt
Pkcs5S2ParametersGenerator generator = new Pkcs5S2ParametersGenerator();
generator.Init(PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()), salt, 1000);
ParametersWithIV keyParam = (ParametersWithIV)generator.GenerateDerivedMacParameters(256 + 128);
// Create AES cipher in CBC mode with PKCS7 padding
var cipher = new PaddedBufferedBlockCipher(new CbcBlockCipher(new AesEngine()));
cipher.Init(true, keyParam);
// Convert message to byte array and encrypt
byte[] inputBytes = Encoding.UTF8.GetBytes(message);
byte[] outputBytes = new byte[cipher.GetOutputSize(inputBytes.Length)];
int length = cipher.ProcessBytes(inputBytes, 0, inputBytes.Length, outputBytes, 0);
cipher.DoFinal(outputBytes, length);
return outputBytes;
}
}Imports Org.BouncyCastle.Crypto
Imports Org.BouncyCastle.Crypto.Engines
Imports Org.BouncyCastle.Crypto.Generators
Imports Org.BouncyCastle.Crypto.Modes
Imports Org.BouncyCastle.Crypto.Parameters
Imports Org.BouncyCastle.Security
Imports System.Text
Public Class SimpleEncryption
''' <summary>
''' Encrypts data using AES encryption with a given password.
''' </summary>
''' <param name="message">The message to encrypt.</param>
''' <param name="password">The password for key derivation.</param>
''' <returns>The encrypted message as a byte array.</returns>
Public Shared Function EncryptData(ByVal message As String, ByVal password As String) As Byte()
' Generate a random salt
Dim salt = New Byte(7){}
Call (New SecureRandom()).NextBytes(salt)
' Derive key and IV from the password and salt
Dim generator As New Pkcs5S2ParametersGenerator()
generator.Init(PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()), salt, 1000)
Dim keyParam As ParametersWithIV = CType(generator.GenerateDerivedMacParameters(256 + 128), ParametersWithIV)
' Create AES cipher in CBC mode with PKCS7 padding
Dim cipher = New PaddedBufferedBlockCipher(New CbcBlockCipher(New AesEngine()))
cipher.Init(True, keyParam)
' Convert message to byte array and encrypt
Dim inputBytes() As Byte = Encoding.UTF8.GetBytes(message)
Dim outputBytes(cipher.GetOutputSize(inputBytes.Length) - 1) As Byte
Dim length As Integer = cipher.ProcessBytes(inputBytes, 0, inputBytes.Length, outputBytes, 0)
cipher.DoFinal(outputBytes, length)
Return outputBytes
End Function
End ClassTen fragment kodu pokazuje, jak stworzyć podstawową metodę szyfrowania przy użyciu bibliotek kryptograficznych Bouncy Castle w C#. Aby użyć tej metody, należałoby wywołać EncryptData z wiadomością, którą chcesz zaszyfrować i hasłem. Na przykład:
string message = "Hello, this is a test message!";
string password = "StrongPassword123";
byte[] encryptedMessage = SimpleEncryption.EncryptData(message, password);
Console.WriteLine("Original Message: " + message);
Console.WriteLine("Encrypted Message: " + BitConverter.ToString(encryptedMessage));Dim message As String = "Hello, this is a test message!"
Dim password As String = "StrongPassword123"
Dim encryptedMessage() As Byte = SimpleEncryption.EncryptData(message, password)
Console.WriteLine("Original Message: " & message)
Console.WriteLine("Encrypted Message: " & BitConverter.ToString(encryptedMessage))Ten przykład jest dość podstawowy i służy jako wprowadzenie. W rzeczywistych aplikacjach należy rozważyć bardziej zaawansowane praktyki, takie jak przechowywanie soli i IV wraz z zaszyfrowanymi danymi oraz obsługę wyjątków, które mogą zostać zgłoszone podczas procesu szyfrowania.

Zaawansowane użycie i dostosowanie
Bouncy Castle nie ogranicza się do podstawowych funkcji. Pozwala na dostosowanie i obsługuje zaawansowane algorytmy kryptograficzne.
NTRU Prime i inne zaawansowane algorytmy
Bouncy Castle zawiera wsparcie dla różnych algorytmów, w tym zaawansowanego NTRU Prime. Daje to programistom elastyczność wyboru najbardziej odpowiedniego algorytmu dla ich specyficznych potrzeb.
Obsługa wyjątków i najlepsze praktyki w zakresie bezpieczeństwa
Właściwa obsługa wyjątków jest kluczowa w aplikacjach kryptograficznych. Metody Bouncy Castle mogą zwracać wyjątki, a ich poprawna obsługa zapewnia solidne i bezpieczne aplikacje.
Integracja IronPDF z Bouncy Castle

IronPDF uzupełnia Bouncy Castle, oferując funkcjonalność pracy z dokumentami PDF, które następnie można zabezpieczyć za pomocą możliwości kryptograficznych Bouncy Castle. Oto jak można zintegrować te dwie potężne biblioteki:
Najważniejszą cechą IronPDF jest jego HTML to PDF Conversion Capabilities, zachowująca wszystkie układy i style. Konwertuje treści internetowe na PDF-y, nadające się do raportów, faktur i dokumentacji. Możesz płynnie konwertować pliki HTML, adresy URL i ciągi znaków HTML do formatu PDF.
Zacznij korzystać z IronPDF
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' 1. Convert HTML String to PDF
Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")
' 2. Convert HTML File to PDF
Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
' 3. Convert URL to PDF
Dim url = "http://ironpdf.com" ' Specify the URL
Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
pdfFromUrl.SaveAs("URLToPDF.pdf")
End Sub
End ClassInstalacja za pomocą menedżera pakietów NuGet
Aby zintegrować IronPDF z projektem Bouncy Castle C# używając Menedżera Pakietów NuGet, postępuj zgodnie z tymi krokami:
- Otwórz Visual Studio i w eksploratorze rozwiązań kliknij prawym przyciskiem myszy na swój projekt.
- Wybierz "Zarządzaj pakietami NuGet…" z menu kontekstowego.
- Przejdź do zakładki "Przeglądaj" i wyszukaj IronPDF.
- Wybierz bibliotekę IronPDF z wyników wyszukiwania i kliknij przycisk instalacji.
- Zaakceptuj wszelkie monity dotyczące Umowy licencyjnej.
Jeśli chcesz dołączyć IronPDF do swojego projektu za pomocą konsoli menedżera pakietów, wykonaj następujące polecenie w konsoli menedżera pakietów:
Pobierze i zainstaluje IronPDF w Twoim projekcie.
Instalacja za pomocą NuGet Strona internetowa
Aby uzyskać szczegółowy przegląd IronPDF, w tym jego funkcje, zgodność i dodatkowe opcje pobierania, odwiedź stronę IronPDF na stronie NuGet pod adresem https://www.nuget.org/packages/IronPdf.
Instalacja za pomocą biblioteki DLL
Alternatywnie, można bezpośrednio zintegrować IronPDF z projektem, używając pliku DLL. Pobierz plik ZIP zawierający DLL z tego Bezpośrednie pobieranie IronPDF. Rozpakuj plik i dołącz bibliotekę DLL do swojego projektu.
Generowanie pliku PDF za pomocą IronPDF
Najpierw stwórzmy Prosty dokument PDF używając IronPDF:
using IronPdf;
public class PdfGenerator
{
/// <summary>
/// Creates a simple PDF from HTML content.
/// </summary>
/// <param name="filePath">The file path to save the PDF.</param>
/// <param name="content">The HTML content to render as PDF.</param>
public static void CreateSimplePdf(string filePath, string content)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(content);
pdf.SaveAs(filePath);
}
}Imports IronPdf
Public Class PdfGenerator
''' <summary>
''' Creates a simple PDF from HTML content.
''' </summary>
''' <param name="filePath">The file path to save the PDF.</param>
''' <param name="content">The HTML content to render as PDF.</param>
Public Shared Sub CreateSimplePdf(ByVal filePath As String, ByVal content As String)
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(content)
pdf.SaveAs(filePath)
End Sub
End ClassW tym kodzie używamy klasy ChromePdfRenderer z IronPDF, aby renderować treści HTML jako PDF i zapisać je do pliku.
Szyfrowanie PDF z Bouncy Castle
Po wygenerowaniu PDF, możemy go zaszyfrować za pomocą Bouncy Castle. Tutaj zmodyfikujemy metodę EncryptData, aby obsługiwać pliki PDF:
using System.IO;
using System.Text;
// ... [Previous Bouncy Castle using statements]
public class PdfEncryption
{
/// <summary>
/// Encrypts a PDF file using AES encryption.
/// </summary>
/// <param name="inputFilePath">The path to the input PDF file.</param>
/// <param name="outputFilePath">The path to save the encrypted PDF file.</param>
/// <param name="password">The password used for encryption.</param>
public static void EncryptPdfFile(string inputFilePath, string outputFilePath, string password)
{
// Read the PDF file
byte[] pdfBytes = File.ReadAllBytes(inputFilePath);
// Encrypt the PDF bytes
byte[] encryptedBytes = SimpleEncryption.EncryptData(Encoding.UTF8.GetString(pdfBytes), password);
// Write the encrypted bytes to a new file
File.WriteAllBytes(outputFilePath, encryptedBytes);
}
}Imports System.IO
Imports System.Text
' ... [Previous Bouncy Castle using statements]
Public Class PdfEncryption
''' <summary>
''' Encrypts a PDF file using AES encryption.
''' </summary>
''' <param name="inputFilePath">The path to the input PDF file.</param>
''' <param name="outputFilePath">The path to save the encrypted PDF file.</param>
''' <param name="password">The password used for encryption.</param>
Public Shared Sub EncryptPdfFile(ByVal inputFilePath As String, ByVal outputFilePath As String, ByVal password As String)
' Read the PDF file
Dim pdfBytes() As Byte = File.ReadAllBytes(inputFilePath)
' Encrypt the PDF bytes
Dim encryptedBytes() As Byte = SimpleEncryption.EncryptData(Encoding.UTF8.GetString(pdfBytes), password)
' Write the encrypted bytes to a new file
File.WriteAllBytes(outputFilePath, encryptedBytes)
End Sub
End ClassW tej metodzie wczytujemy plik PDF jako bajty, szyfrujemy te bajty, używając wcześniej zdefiniowanej klasy SimpleEncryption, a następnie zapisujemy zaszyfrowane bajty do nowego pliku.
Wnioski

Podsumowując, kombinacja Bouncy Castle C# i IronPDF oferuje rozwiązanie dla tworzenia i zabezpieczania dokumentów PDF w aplikacjach .NET. Bouncy Castle dostarcza niezbędnych narzędzi kryptograficznych do zabezpieczania danych, podczas gdy IronPDF umożliwia łatwe tworzenie i manipulację PDF. Integracja ta jest szczególnie cenna w sytuacjach wymagających wysokiego poziomu bezpieczeństwa i poufności dokumentów.
Dla zainteresowanych eksploracją IronPDF, biblioteka oferuje bezpłatną wersję próbną, umożliwiającą programistom eksperymentowanie i ocenę jej funkcji. Jeśli zdecydujesz się zintegrować IronPDF w swoim środowisku produkcyjnym, informacje o licencjonowaniu i opcje są dostępne.

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.
Powiązane artykuły


