Erstellen Sie ein PDF mit BouncyCastle. Sehen Sie die Ergebnisse in Aktion!
using IronPdf;
public class PdfGenerator
{
public static void CreateSimplePdf(string filePath, string content)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(content);
pdf.SaveAs(filePath);
}
}
public class PdfEncryption
{
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);
}
}
BouncyCastle C# (Wie es für Entwickler funktioniert)
Chipego Kalinda
14. Januar 2024
Teilen Sie:
BouncyCastle C# ist eine umfassende Bibliothek, die .NET-Entwicklern eine breite Auswahl an kryptografischen Algorithmen und Werkzeugen bietet. Dieser Leitfaden soll Anfängern die Grundlagen von Bouncy Castle näher bringen, seine Möglichkeiten als Sicherheitsanbieter aufzeigen und praktische Beispiele für den täglichen Gebrauch bieten. Wir werden auch lernen, wie wir es mit der [IronPDF .NET PDF Library](/ verwenden können.
Einführung in die Hüpfburg
Bouncy Castle zeichnet sich als leistungsfähige und vielseitige Bibliothek im Bereich der kryptografischen Sicherheit aus. Es handelt sich um ein eingetragenes australisches Wohltätigkeitsprojekt mit dem Ziel, hochwertige Sicherheitsdienste für Java und C# bereitzustellen. Die Bibliothek wird unter einer Lizenz verwaltet, die auf der MIT X Consortium License basiert, die eine weit verbreitete Nutzung und Beiträge fördert.
Den Zweck einer Hüpfburg verstehen
Bouncy Castle dient als Sicherheitsanbieter und bietet eine breite Palette von kryptographischen Algorithmen. Seine Vielseitigkeit erlaubt es, verschiedene Sicherheitsanforderungen zu erfüllen, von der einfachen Verschlüsselung bis hin zu komplexen digitalen Signaturen. Als Anfänger ist es wichtig, den Umfang von Bouncy Castle zu verstehen, um es effektiv in Ihre Projekte zu implementieren.
Erste Schritte mit Bouncy Castle in C#;
Die Implementierung von Bouncy Castle in C# beginnt mit dem Einrichten der Umgebung und dem Verständnis ihrer grundlegenden Komponenten.
Einrichten
Bibliothek herunterladen: Um loszulegen, laden Sie die neueste Version des Bouncy Castle-Pakets von der offiziellen Bouncy Castle Website herunter. Stellen Sie sicher, dass Sie die richtige Version für Ihr Projekt auswählen.
Integrieren Sie in Ihr Projekt: Nach dem Herunterladen integrieren Sie Bouncy Castle in Ihr C#-Projekt. Dazu müssen Sie die Bibliothek in der Regel als Referenz in Ihren Projekteinstellungen hinzufügen.
Sie können es auch mit dem NuGet Package Manager herunterladen und installieren, indem Sie "Bouncycastle" in der Suchleiste des NuGet Package Managers suchen.
Beispiel für Grundverschlüsselung
In diesem Beispiel werde ich ein einfaches Verschlüsselungsszenario mit AES (Advanced Encryption Standard) unter Verwendung von Bouncy Castle in C# demonstrieren.
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
{
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;
}
}
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
{
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
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 Class
$vbLabelText $csharpLabel
Dieses Codeschnipsel zeigt, wie man eine einfache Verschlüsselungsmethode erstellt. Um die Sicherheit Ihrer Implementierung zu gewährleisten, ist es wichtig, alle Ausnahmen zu behandeln, die möglicherweise ausgelöst werden. Um diese Methode zu verwenden, würden Sie EncryptData mit der Nachricht, die Sie verschlüsseln möchten, und einem Passwort aufrufen. Zum Beispiel:
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));
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))
$vbLabelText $csharpLabel
Dieses Beispiel ist recht einfach und dient als Einführung. In realen Anwendungen sollten Sie robustere Praktiken in Betracht ziehen, wie die Speicherung von Salt und IV zusammen mit den verschlüsselten Daten und die Behandlung von Ausnahmen, die während des Verschlüsselungsprozesses ausgelöst werden könnten.
Erweiterte Nutzung und Anpassung
Bouncy Castle ist nicht auf die Grundfunktionen beschränkt. Es lässt sich individuell anpassen und unterstützt fortschrittliche kryptografische Algorithmen.
NTRU Prime und andere fortgeschrittene Algorithmen
Bouncy Castle umfasst Unterstützung für eine Vielzahl von Algorithmen, einschließlich des fortschrittlichen NTRU Prime. Dies gibt den Entwicklern die Flexibilität, den am besten geeigneten Algorithmus für ihre spezifischen Bedürfnisse zu wählen.
Best Practices für Ausnahmebehandlung und Sicherheit
Die richtige Behandlung von Ausnahmen ist bei kryptografischen Anwendungen von entscheidender Bedeutung. Die Methoden von Bouncy Castle können Ausnahmen auslösen, und die korrekte Behandlung dieser Ausnahmen gewährleistet robuste und sichere Anwendungen.
Einbindung von IronPDF in die Hüpfburg
IronPDF ergänzt Bouncy Castle, indem es die Funktionalität bereitstellt, um mit PDF-Dokumenten zu arbeiten, die dann mithilfe der kryptographischen Fähigkeiten von Bouncy Castle gesichert werden können. Im Folgenden erfahren Sie, wie Sie diese beiden leistungsstarken Bibliotheken integrieren können:
Das herausragende Merkmal von IronPDF ist seine HTML-zu-PDF-Konvertierungsfähigkeit, die alle Layouts und Stile bewahrt. Es wandelt Webinhalte in PDF-Dateien um, die sich für Berichte, Rechnungen und Dokumentationen eignen. Sie können HTML-Dateien, URLs und HTML-Strings nahtlos in PDFs konvertieren.
Erste Schritte mit IronPDF
Beginnen Sie noch heute mit der Verwendung von IronPDF in Ihrem Projekt mit einer kostenlosen Testversion.
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");
}
}
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 Class
$vbLabelText $csharpLabel
Installation mit NuGet-Paketmanager
Gehen Sie folgendermaßen vor, um IronPDF mithilfe des NuGet-Paketmanagers in Ihr Bouncy Castle C#-Projekt zu integrieren:
Öffnen Sie Visual Studio und klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt.
Wählen Sie "NuGet-Pakete verwalten..." aus dem Kontextmenü.
Gehen Sie auf die Registerkarte Durchsuchen und suchen Sie nach IronPDF.
Wählen Sie die IronPDF-Bibliothek aus den Suchergebnissen aus und klicken Sie auf die Schaltfläche Installieren.
Akzeptieren Sie die Aufforderung zu einer Lizenzvereinbarung.
Wenn Sie IronPDF über die Paketverwaltungskonsole in Ihr Projekt einbinden möchten, führen Sie den folgenden Befehl in der Paketverwaltungskonsole aus:
Install-Package IronPdf
Es wird IronPDF in Ihr Projekt holen und installieren.
Installation über die NuGet-Website
Einen detaillierten Überblick über IronPDF, einschließlich seiner Funktionen, Kompatibilität und zusätzlicher Download-Optionen, finden Sie auf der IronPDF-Seite auf der NuGet-Website unter https://www.nuget.org/packages/IronPdf.
Installation über DLL
Alternativ können Sie IronPDF direkt in Ihr Projekt integrieren, indem Sie dessen DLL-Datei verwenden. Laden Sie die ZIP-Datei, die die DLL enthält, von diesem Direkt-Download von IronPDF herunter. Entpacken Sie die Datei, und binden Sie die DLL in Ihr Projekt ein.
using IronPdf;
public class PdfGenerator
{
public static void CreateSimplePdf(string filePath, string content)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(content);
pdf.SaveAs(filePath);
}
}
using IronPdf;
public class PdfGenerator
{
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
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 Class
$vbLabelText $csharpLabel
In diesem Code verwenden wir die ChromePdfRenderer-Klasse von IronPDF, um HTML-Inhalte als PDF zu rendern und in einer Datei zu speichern.
Verschlüsselung der PDF-Datei mit Bouncy Castle
Nach der Erstellung der PDF-Datei können wir sie mit Bouncy Castle verschlüsseln. Hier werden wir die EncryptData-Methode anpassen, um PDF-Dateien zu verarbeiten:
// ... [Previous Bouncy Castle using statements]
public class PdfEncryption
{
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);
}
}
// ... [Previous Bouncy Castle using statements]
public class PdfEncryption
{
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);
}
}
' ... [Previous Bouncy Castle using statements]
Public Class PdfEncryption
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 Class
$vbLabelText $csharpLabel
In dieser Methode lesen wir die PDF-Datei als Bytes, verschlüsseln diese Bytes mit unserer zuvor definierten SimpleEncryption-Klasse und schreiben dann die verschlüsselten Bytes in eine neue Datei.
Schlussfolgerung
Zusammenfassend lässt sich sagen, dass die Kombination von Bouncy Castle C# und IronPDF eine Lösung für die Erstellung und Sicherung von PDF-Dokumenten in .NET-Anwendungen darstellt. Bouncy Castle bietet die notwendigen kryptografischen Werkzeuge zur Sicherung von Daten, während IronPDF die einfache Erstellung und Bearbeitung von PDF-Dateien ermöglicht. Diese Integration ist besonders wertvoll in Szenarien, die ein hohes Maß an Dokumentensicherheit und Vertraulichkeit erfordern.
Für diejenigen, die IronPDF kennenlernen möchten, bietet die Bibliothek eine kostenlose Testversion an, mit der Entwickler experimentieren und die Funktionen testen können. Sollten Sie sich entscheiden, IronPDF in Ihre Produktionsumgebung zu integrieren, stehen Lizenzinformationen und Optionen zur Verfügung.
Chipego hat eine natürliche Fähigkeit zum Zuhören, die ihm hilft, Kundenprobleme zu verstehen und intelligente Lösungen anzubieten. Er trat dem Iron Software-Team 2023 bei, nachdem er einen Bachelor of Science in Informationstechnologie erworben hatte. IronPDF und IronOCR sind die beiden Produkte, auf die sich Chipego konzentriert hat, aber sein Wissen über alle Produkte wächst täglich, da er neue Wege findet, Kunden zu unterstützen. Er genießt die Zusammenarbeit bei Iron Software, da Teammitglieder aus dem gesamten Unternehmen ihre unterschiedlichen Erfahrungen einbringen und so zu effektiven, innovativen Lösungen beitragen. Wenn Chipego nicht an seinem Schreibtisch sitzt, kann man ihn oft bei einem guten Buch oder beim Fußballspielen antreffen.
< PREVIOUS C#-String-Interpolation (Wie es für Entwickler funktioniert)
NÄCHSTES > Math.NET C# (Wie es für Entwickler funktioniert)