AYUDA .NET

BouncyCastle C# (Cómo funciona para desarrolladores)

Actualizado 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 IronPDF biblioteca.

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 oficial sitio web. 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)
    {
        //  Generar una sal aleatoria
        var salt = new byte [8];
        new SecureRandom().NextBytes(salt);
        //  Derivar la clave y el IV a partir de la contraseña y la sal
        Pkcs5S2ParametersGenerator generator = new Pkcs5S2ParametersGenerator();
        generator.Init(PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()), salt, 1000);
        ParametersWithIV keyParam = (ParametersWithIV)generator.GenerateDerivedMacParameters(256 + 128);
        //  Crear cifrado AES en modo CBC con relleno PKCS7
        var cipher = new PaddedBufferedBlockCipher(new CbcBlockCipher(new AesEngine()));
        cipher.Init(true, keyParam);
        //  Convertir mensaje en matriz de bytes y encriptar
        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)
    {
        //  Generar una sal aleatoria
        var salt = new byte [8];
        new SecureRandom().NextBytes(salt);
        //  Derivar la clave y el IV a partir de la contraseña y la sal
        Pkcs5S2ParametersGenerator generator = new Pkcs5S2ParametersGenerator();
        generator.Init(PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()), salt, 1000);
        ParametersWithIV keyParam = (ParametersWithIV)generator.GenerateDerivedMacParameters(256 + 128);
        //  Crear cifrado AES en modo CBC con relleno PKCS7
        var cipher = new PaddedBufferedBlockCipher(new CbcBlockCipher(new AesEngine()));
        cipher.Init(true, keyParam);
        //  Convertir mensaje en matriz de bytes y encriptar
        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()
		'  Generar una sal aleatoria
		Dim salt = New Byte (7){}
		Call (New SecureRandom()).NextBytes(salt)
		'  Derivar la clave y el IV a partir de la contraseña y la sal
		Dim generator As New Pkcs5S2ParametersGenerator()
		generator.Init(PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()), salt, 1000)
		Dim keyParam As ParametersWithIV = CType(generator.GenerateDerivedMacParameters(256 + 128), ParametersWithIV)
		'  Crear cifrado AES en modo CBC con relleno PKCS7
		Dim cipher = New PaddedBufferedBlockCipher(New CbcBlockCipher(New AesEngine()))
		cipher.Init(True, keyParam)
		'  Convertir mensaje en matriz de bytes y encriptar
		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 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 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:

Instalar la biblioteca IronPDF

Biblioteca NuGet C# para PDF

Instalar con NuGet

Install-Package IronPdf
o
Java PDF JAR

Descargar DLL

Descargar DLL

Instalar manualmente en su proyecto

Instalación mediante el gestor de paquetes NuGet

Para integrar IronPDF en su proyecto BountyCastle C# utilizando 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 la consola del gestor de paquetes, ejecute el siguiente comando en la consola del gestor de paquetes:

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

Como alternativa, puede incorporar IronPDF directamente a su proyecto utilizando su archivo dll. Descargue el archivo ZIP que contiene la DLL desde aquí enlace. Descomprímelo e incluye la DLL en tu proyecto.

Generar un PDF con IronPDF

En primer lugar crear un documento PDF sencillo utilizando 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:

//  ... [Anterior Castillo hinchable utilizando declaraciones]
public class PdfEncryption
{
    public static void EncryptPdfFile(string inputFilePath, string outputFilePath, string password)
    {
        //  Leer el archivo PDF
        byte [] pdfBytes = File.ReadAllBytes(inputFilePath);
        //  Cifrar los bytes del PDF
        byte [] encryptedBytes = SimpleEncryption.EncryptData(Encoding.UTF8.GetString(pdfBytes), password);
        //  Escribe los bytes encriptados en un nuevo archivo
        File.WriteAllBytes(outputFilePath, encryptedBytes);
    }
}
//  ... [Anterior Castillo hinchable utilizando declaraciones]
public class PdfEncryption
{
    public static void EncryptPdfFile(string inputFilePath, string outputFilePath, string password)
    {
        //  Leer el archivo PDF
        byte [] pdfBytes = File.ReadAllBytes(inputFilePath);
        //  Cifrar los bytes del PDF
        byte [] encryptedBytes = SimpleEncryption.EncryptData(Encoding.UTF8.GetString(pdfBytes), password);
        //  Escribe los bytes encriptados en un nuevo archivo
        File.WriteAllBytes(outputFilePath, encryptedBytes);
    }
}
'  ... [Anterior Castillo hinchable utilizando declaraciones]
Public Class PdfEncryption
	Public Shared Sub EncryptPdfFile(ByVal inputFilePath As String, ByVal outputFilePath As String, ByVal password As String)
		'  Leer el archivo PDF
		Dim pdfBytes() As Byte = File.ReadAllBytes(inputFilePath)
		'  Cifrar los bytes del PDF
		Dim encryptedBytes() As Byte = SimpleEncryption.EncryptData(Encoding.UTF8.GetString(pdfBytes), password)
		'  Escribe los bytes encriptados en un nuevo archivo
		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 los interesados en explorar IronPDF que permite a los desarrolladores experimentar y evaluar sus funciones. Si decide integrar IronPDF en su entorno de producción, la licencia comienza a partir de $749.

< 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.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 9,974,197 Ver licencias >
123