AYUDA .NET

BouncyCastle C# (Cómo Funciona Para Desarrolladores)

Publicado en 14 de enero, 2024
Compartir:

BouncyCastle C# es una completa biblioteca que proporciona una amplia opción de algoritmos criptográficos y herramientas para desarrolladores .NET. Esta guía pretende introducir a los principiantes en los fundamentos de Bouncy Castle, destacando sus capacidades como proveedor de seguridad y ofreciendo ejemplos prácticos de uso cotidiano. También aprenderemos a utilizarlo con la función[Biblioteca PDF .NET IronPDF](/.

Introducción al castillo hinchable

Bouncy Castle destaca como una biblioteca potente y versátil en el ámbito de la seguridad criptográfica. Se trata de un proyecto benéfico australiano registrado cuyo objetivo es ofrecer servicios de seguridad de alta calidad para Java y C#. La biblioteca se mantiene bajo una licencia basada en la Licencia MIT X Consortium, que fomenta el uso generalizado y la contribución.

Comprender la finalidad de los castillos hinchables

Bouncy Castle actúa como proveedor de seguridad, ofreciendo una amplia gama de algoritmos criptográficos. Su versatilidad le permite satisfacer diversas necesidades de seguridad, desde el cifrado básico hasta la firma digital compleja. Como principiante, entender el alcance de Bouncy Castle es clave para implementarlo eficazmente en tus proyectos.

Introducción al castillo hinchable en C#

La implementación de Bouncy Castle en C# comienza con la configuración del entorno y la comprensión de sus componentes básicos.

Puesta en marcha

Descarga la biblioteca: Para empezar, descarga la última versión del paquete Bouncy Castle desde su página oficialSitio web de Bouncy Castle. Asegúrese de seleccionar la versión correcta que se ajuste a las necesidades de su proyecto.

Integre en su proyecto: Después de descargarlo, integra Bouncy Castle en tu proyecto C#. Esto suele implicar añadir la biblioteca como referencia en la configuración del proyecto.

También puedes descargarlo e instalarlo utilizando NuGet Package Manager buscando "Bouncycastle" en la barra de búsqueda de NuGet Package Manager.

BouncyCastle C#(Cómo funciona para desarrolladores): Figura 1 - Descargar e instalar Bouncy Castle utilizando NuGet Package Manager buscando "Bouncycastle" en la barra de búsqueda de NuGet Package Manager

Ejemplo de cifrado básico

En este ejemplo, mostraré un escenario de encriptación simple utilizando AES(Estándar de cifrado avanzado) con Bouncy Castle en 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
{
    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
VB   C#

Este fragmento de código muestra cómo crear un método de cifrado básico. Es esencial manejar cualquier excepción que pueda ser lanzada para garantizar la seguridad de su implementación. Para utilizar este método, debe llamar a EncryptData con el mensaje que desea cifrar y una contraseña. Por ejemplo:

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))
VB   C#

Este ejemplo es bastante básico y sirve de introducción. En aplicaciones del mundo real, deberías considerar prácticas más robustas, como almacenar la sal y el IV junto con los datos encriptados y manejar las excepciones que puedan lanzarse durante el proceso de encriptación.

BouncyCastle C#(Cómo funciona para desarrolladores): Figura 2 - Salida de la consola

Uso avanzado y personalización

El castillo hinchable no se limita a las funciones básicas. Permite la personalización y admite algoritmos criptográficos avanzados.

NTRU Prime y otros algoritmos avanzados

Bouncy Castle es compatible con varios algoritmos, incluido el avanzadoNTRU Prime. Esto da a los desarrolladores la flexibilidad de elegir el algoritmo más adecuado para sus necesidades específicas.

Gestión de excepciones y buenas prácticas de seguridad

Un manejo adecuado de las excepciones es crucial en las aplicaciones criptográficas. Los métodos de Bouncy Castle pueden lanzar excepciones, y manejarlas correctamente garantiza aplicaciones robustas y seguras.

Incorporación de IronPDF con Bouncy Castle

BouncyCastle C#(Cómo funciona para desarrolladores): Figura 3 - IronPDF for .NET: La biblioteca PDF de C#

IronPDF complementa a Bouncy Castle proporcionando la funcionalidad necesaria para trabajar con documentos PDF, que pueden protegerse utilizando las capacidades criptográficas de Bouncy Castle. A continuación se explica cómo integrar estas dos potentes bibliotecas:

La característica más destacada de IronPDF es suFunciones de conversión de HTML a PDF, preservando todos los diseños y estilos. Convierte contenidos web en PDF, adecuados para informes, facturas y documentación. Puede convertir archivos HTML, URL y cadenas HTML en PDF sin problemas.

Comience con IronPDF

Comience a usar IronPDF en su proyecto hoy con una prueba gratuita.

Primer Paso:
green arrow pointer


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
VB   C#

Instalación mediante el gestor de paquetes NuGet

Para integrar IronPDF en su proyecto Bouncy Castle C# mediante el gestor de paquetes NuGet, siga estos pasos:

  1. Abra Visual Studio y, en el explorador de soluciones, haga clic con el botón derecho del ratón en su proyecto.

  2. Seleccione "Gestionar paquetes NuGet..." en el menú contextual.

  3. Vaya a la pestaña Examinar y busque IronPDF.

  4. Seleccione la biblioteca IronPDF en los resultados de la búsqueda y haga clic en el botón Instalar.

  5. Acepte cualquier solicitud de acuerdo de licencia.

    Si desea incluir IronPDF en su proyecto a través de Package Manager Console, ejecute el siguiente comando en Package Manager Console:

Install-Package IronPdf

Buscará e instalará IronPDF en su proyecto.

Instalación mediante el sitio web de NuGet

Para obtener una descripción detallada de IronPDF, incluidas sus características, compatibilidad y opciones de descarga adicionales, visite la página de IronPDF en el sitio web de NuGet en https://www.nuget.org/packages/IronPdf.

Instalar mediante DLL

También puede incorporar IronPDF directamente a su proyecto utilizando su archivo DLL. Descargue el archivo ZIP que contiene la DLL desde aquíDescarga directa de IronPDF. Descomprímelo e incluye la DLL en tu proyecto.

Generar un PDF con IronPDF

En primer lugarCrear un documento PDF simple con IronPDF:

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
VB   C#

En este código, utilizamos la clase ChromePdfRenderer de IronPDF para renderizar el contenido HTML como un PDF y guardarlo en un archivo.

Cifrar el PDF con Bouncy Castle

Después de generar el PDF, podemos cifrarlo utilizando Bouncy Castle. Aquí, modificaremos el método EncryptData para manejar archivos PDF:

// ... [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
VB   C#

En este método, leemos el archivo PDF como bytes, ciframos estos bytes usando nuestra clase SimpleEncryption previamente definida, y luego escribimos los bytes cifrados en un nuevo archivo.

Conclusión

BouncyCastle C#(Cómo funciona para desarrolladores): Figura 5 - Información sobre la licencia de IronPDF

En conclusión, la combinación de Bouncy Castle C# e IronPDF ofrece una solución para crear y proteger documentos PDF en aplicaciones .NET. Bouncy Castle proporciona las herramientas criptográficas necesarias para proteger los datos, mientras que IronPDF aporta la facilidad de creación y manipulación de PDF. Esta integración es especialmente valiosa en situaciones que requieren altos niveles de seguridad y confidencialidad de los documentos.

Para aquellos interesados en explorar IronPDF, la biblioteca ofrece una versión de prueba gratuita, que permite a los desarrolladores experimentar y evaluar sus características. Si decide integrar IronPDF en su entorno de producción,información sobre licencias y opciones están disponibles.

< ANTERIOR
Interpolación de cadenas en C# (Cómo funciona para desarrolladores)
SIGUIENTE >
Math.NET C# (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.12 acaba de salir

Descarga gratuita de NuGet Descargas totales: 11,781,565 Ver licencias >