AYUDA .NET

BouncyCastle C# (Cómo Funciona Para Desarrolladores)

Chipego
Chipego Kalinda
14 de enero, 2024
Compartir:

BouncyCastle C# es una biblioteca completa que ofrece una amplia gama de algoritmos y herramientas criptográficas para desarrolladores de .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 cómo podemos usarlo con la [Biblioteca PDF IronPDF .NET](/.

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

Descargar la Biblioteca: Para comenzar, descargue la versión más reciente del paquete de Bouncy Castle desde su sitio web oficial de Bouncy Castle. Asegúrese de seleccionar la versión correcta que se ajuste a las necesidades de su proyecto.

Integrar en su proyecto: Después de descargar, integre Bouncy Castle en su proyecto de 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 el desarrollador): Figura 1 - Descarga e instala Bouncy Castle utilizando el Administrador de Paquetes NuGet buscando "Bouncycastle" en la barra de búsqueda del Administrador de Paquetes NuGet

Ejemplo de cifrado básico

En este ejemplo, demostraré un escenario simple de cifrado utilizando AES (Advanced Encryption Standard) 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
$vbLabelText   $csharpLabel

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 usar este método, deberías llamar a EncryptData con el mensaje que deseas 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))
$vbLabelText   $csharpLabel

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 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 incluye soporte para una variedad de algoritmos, incluyendo el avanzado NTRU 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 Bouncy Castle al proporcionar la funcionalidad para trabajar con documentos PDF, que luego pueden ser asegurados utilizando las capacidades criptográficas de Bouncy Castle. A continuación se explica cómo integrar estas dos potentes bibliotecas:

La característica destacada de IronPDF es su capacidad 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
$vbLabelText   $csharpLabel

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

Alternativamente, puede incorporar IronPDF directamente en su proyecto utilizando su archivo DLL. Descargue el archivo ZIP que contiene la DLL desde esta Descarga Directa de IronPDF. Descomprímelo e incluye la DLL en tu proyecto.

Generar un PDF con IronPDF

Primero, vamos a Crear un Documento PDF Simple usando 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
$vbLabelText   $csharpLabel

En este código, utilizamos la clase ChromePdfRenderer de IronPDF para renderizar 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
$vbLabelText   $csharpLabel

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

Conclusión

BouncyCastle C# (Cómo funciona para desarrolladores): Figura 5 - Información de 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, la información y opciones de licencia están disponibles.

Chipego
Ingeniero de software
Chipego tiene una habilidad natural para escuchar que le ayuda a comprender los problemas de los clientes y a ofrecer soluciones inteligentes. Se unió al equipo de Iron Software en 2023, después de estudiar una licenciatura en Tecnología de la Información. IronPDF e IronOCR son los dos productos en los que Chipego se ha centrado, pero su conocimiento de todos los productos crece día a día, a medida que encuentra nuevas formas de ayudar a los clientes. Disfruta de lo colaborativa que es la vida en Iron Software, con miembros del equipo de toda la empresa que aportan su variada experiencia para contribuir a soluciones eficaces e innovadoras. Cuando Chipego está lejos de su escritorio, a menudo se le puede encontrar disfrutando de un buen libro o jugando al fútbol.
< ANTERIOR
Interpolación de cadenas en C# (Cómo funciona para desarrolladores)
SIGUIENTE >
Math.NET C# (Cómo funciona para desarrolladores)