AYUDA .NET

C# XOR (Cómo funciona para desarrolladores)

Introducción

Al trabajar con PDFs en C#, la seguridad y la manipulación de datos son preocupaciones importantes. Una técnica efectiva para el cifrado liviano y la transformación de datos es la operación XOR a nivel de bits. Esta técnica se utiliza ampliamente en operaciones lógicas, ofuscación de datos y marcas de agua.

IronPDF, una potente biblioteca de C# para manejar PDFs, permite a los desarrolladores integrar operadores lógicos a nivel de bits en los flujos de trabajo de PDF. Al aprovechar el operador lógico XOR, podemos aplicar transformaciones a texto, imágenes y metadatos dentro de los PDFs.

En esta guía, exploraremos cómo funciona IronPDF.

Comprender XOR en C

¿Qué es XOR?

XOR (también conocido como el operador lógico O exclusivo) está representado en el código por el símbolo '^' y es una operación binaria utilizada para realizar operaciones XOR a nivel de bits. Entonces, ¿en qué se diferencia del operador OR lógico? Aunque estos dos operadores comparten un nombre similar, el uso de la palabra 'exclusive' en el nombre del operador XOR es lo que los distingue. El operador lógico OR es más un operando inclusivo, visto más como un operador AND/OR, donde retornará verdadero si uno o ambos de los dos operandos son verdaderos.

XOR, por otro lado, funciona de manera un poco diferente. Este operador bit a bit evalúa valores booleanos y solo devolverá verdadero si uno de los dos operandos proporcionados devuelve verdadero. Si ambas opciones devuelven el mismo resultado, devuelve falso.

Para una visión más simplificada, veamos una tabla de verdad que demuestra cómo funciona el XOR:

en1

in2

fuera

1

1

1

1

1

1

Mientras que OR funciona así:

en1

in2

fuera

1

1

1

1

1

Por ejemplo:

byte a = 0b10101010; // 170 in decimal
byte b = 0b11001100; // 204 in decimal
byte result = (byte)(a ^ b); // XOR operation
Console.WriteLine(Convert.ToString(result, 2)); // Output: 01100110
byte a = 0b10101010; // 170 in decimal
byte b = 0b11001100; // 204 in decimal
byte result = (byte)(a ^ b); // XOR operation
Console.WriteLine(Convert.ToString(result, 2)); // Output: 01100110
Dim a As Byte = &B10101010 ' 170 in decimal
Dim b As Byte = &B11001100 ' 204 in decimal
Dim result As Byte = CByte(a Xor b) ' XOR operation
Console.WriteLine(Convert.ToString(result, 2)) ' Output: 01100110
$vbLabelText   $csharpLabel

'Imagen rota'

Texto alternativo claro

En expresiones booleanas, XOR se puede aplicar a operandos bool:

bool a = true;
bool b = false;
bool result = a ^ b; // Logical XOR operator
Console.WriteLine(result); // Output: True
bool a = true;
bool b = false;
bool result = a ^ b; // Logical XOR operator
Console.WriteLine(result); // Output: True
Dim a As Boolean = True
Dim b As Boolean = False
Dim result As Boolean = a Xor b ' Logical XOR operator
Console.WriteLine(result) ' Output: True
$vbLabelText   $csharpLabel

C# XOR (Cómo funciona para desarrolladores): Figura 2 - salida de expresión booleana

Añadir desde PixabaySubir

o arrastre y suelte una imagen aquí

Texto alternativo claro

Aquí, utilizamos una operación de bits para comparar dos operandos. El operando derecho es diferente del izquierdo, lo que garantiza que la salida sea verdadera. Si el segundo operando hubiera sido igual al primero, habríamos visto false.

Precedencia de operadores y XOR

La operación XOR a nivel de bits tiene una precedencia de operador más baja que los operadores aritméticos, pero más alta que el complemento a nivel de bits (~) y la negación lógica (!).

Por ejemplo:

int x = 5 ^ 2 + 3; 
Console.WriteLine(x); // Output: 0
int x = 5 ^ 2 + 3; 
Console.WriteLine(x); // Output: 0
CONVERTER NOT RUNNING
$vbLabelText   $csharpLabel

'Imagen rota'

Agregar texto alternativo de la imagen

Precedencia de operadores en C

    • (Adición) tiene mayor precedencia que ^ (XOR a nivel de bits).

    • Esto significa que la expresión se evalúa como:
int x = 5 ^ (2 + 3); // Equivalent to 5 ^ 5
int x = 5 ^ (2 + 3); // Equivalent to 5 ^ 5
Dim x As Integer = 5 Xor (2 + 3) ' Equivalent to 5 ^ 5
$vbLabelText   $csharpLabel
  • Ahora, calculando XOR a nivel de bits:
5  = 00000101  
    5  = 00000101  
    -------------
    XOR = 00000000  (Decimal 0)
5  = 00000101  
    5  = 00000101  
    -------------
    XOR = 00000000  (Decimal 0)
CONVERTER NOT RUNNING
$vbLabelText   $csharpLabel
  • Resultado final: 0.

XOR para la seguridad y el procesamiento de PDF

Uso de XOR para el cifrado básico en PDFs

Como XOR puede codificar y decodificar datos con la misma operación, a menudo se utiliza para cifrado ligero. Aunque no es una medida de seguridad fuerte en comparación con el cifrado AES, proporciona una forma rápida de ofuscar el contenido de PDF.

XOR para alternar la visibilidad de la imagen

XOR se puede utilizar para alternar dinámicamente la visibilidad de marcas de agua basadas en imágenes. Por ejemplo, una marca de agua puede ser codificada usando XOR, haciéndola visible solo cuando se aplica una clave conocida. Este mismo método podría aplicarse a marcas de agua y sellos basados en texto.

XOR en la ofuscación de metadatos

Los metadatos de PDF a menudo contienen detalles sensibles, como el autor del documento, la fecha de creación y otros identificadores. XOR se puede aplicar a los campos de metadata para hacerlos ilegibles sin decodificación.

Implementación de XOR con IronPDF en C

Procesamiento de texto PDF basado en XOR

Aplicar XOR al texto antes de insertarlo en un PDF puede proporcionar una forma básica de ofuscación. En el siguiente ejemplo, examinamos más de cerca el código involucrado en este proceso.

Ejemplo: Codificación y Decodificación de Texto con XOR en IronPDF

using IronPdf;
using IronSoftware.Drawing;
using System;
using System.Text;
class Program
{
    static string XorEncryptDecrypt(string text, char key)
    {
        StringBuilder output = new StringBuilder();
        foreach (char c in text)
        {
            output.Append((char)(c ^ key));
        }
        return output.ToString();
    }
    static void Main()
    {
        var text = "Confidential Information";
        char key = 'X'; // Simple XOR key
        string encodedText = XorEncryptDecrypt(text, key);
        var pdf = new PdfDocument(270, 270);
        pdf.DrawText(encodedText, FontTypes.TimesNewRoman.Name, FontSize: 40, PageIndex: 0, X: 150, Y: 300, Color.Black, Rotation: 0);
        pdf.SaveAs("XorEncoded.pdf");
        Console.WriteLine("PDF with XOR-encoded text created.");
    }
}
using IronPdf;
using IronSoftware.Drawing;
using System;
using System.Text;
class Program
{
    static string XorEncryptDecrypt(string text, char key)
    {
        StringBuilder output = new StringBuilder();
        foreach (char c in text)
        {
            output.Append((char)(c ^ key));
        }
        return output.ToString();
    }
    static void Main()
    {
        var text = "Confidential Information";
        char key = 'X'; // Simple XOR key
        string encodedText = XorEncryptDecrypt(text, key);
        var pdf = new PdfDocument(270, 270);
        pdf.DrawText(encodedText, FontTypes.TimesNewRoman.Name, FontSize: 40, PageIndex: 0, X: 150, Y: 300, Color.Black, Rotation: 0);
        pdf.SaveAs("XorEncoded.pdf");
        Console.WriteLine("PDF with XOR-encoded text created.");
    }
}
Imports IronPdf
Imports IronSoftware.Drawing
Imports System
Imports System.Text
Friend Class Program
	Private Shared Function XorEncryptDecrypt(ByVal text As String, ByVal key As Char) As String
		Dim output As New StringBuilder()
		For Each c As Char In text
			output.Append(ChrW(AscW(c) Xor AscW(key)))
		Next c
		Return output.ToString()
	End Function
	Shared Sub Main()
		Dim text = "Confidential Information"
		Dim key As Char = "X"c ' Simple XOR key
		Dim encodedText As String = XorEncryptDecrypt(text, key)
		Dim pdf = New PdfDocument(270, 270)
		pdf.DrawText(encodedText, FontTypes.TimesNewRoman.Name, FontSize:= 40, PageIndex:= 0, X:= 150, Y:= 300, Color.Black, Rotation:= 0)
		pdf.SaveAs("XorEncoded.pdf")
		Console.WriteLine("PDF with XOR-encoded text created.")
	End Sub
End Class
$vbLabelText   $csharpLabel

Salida

C# XOR (Cómo funciona para desarrolladores): Figura 4 - Salida de texto codificado en PDF

Añadir desde PixabaySubir

o arrastre y suelte una imagen aquí

Texto alternativo claro

Aquí, la función XOR se utiliza para ofuscar texto antes de insertarlo en un PDF. La misma función puede descifrarlo aplicando XOR de nuevo con la misma clave.

XOR para la manipulación de imágenes PDF

XOR también se puede aplicar a las imágenes antes de incrustarlas en un PDF, alterando sus valores de píxel para que solo sean visibles cuando se decodifican.

Ejemplo: Aplicación de XOR en píxeles de imagen antes de insertarlos en archivos PDF

using IronPdf;
using IronPdf.Editing;
using System;
using System.Drawing;
using System.Text;
class Program
{
    static Bitmap XorImage(Bitmap image, byte key)
    {
        for (int y = 0; y < image.Height; y++)
        {
            for (int x = 0; x < image.Width; x++)
            {
                Color pixel = image.GetPixel(x, y);
                Color newPixel = Color.FromArgb(pixel.A, pixel.R ^ key, pixel.G ^ key, pixel.B ^ key);
                image.SetPixel(x, y, newPixel);
            }
        }
        return image;
    }
    static void Main()
    {
        var pdf = new PdfDocument(270, 270);
        Bitmap image = new Bitmap("example_image.png");
        Bitmap encodedImage = XorImage(image, 0x55);
        encodedImage.Save("XorImage.png");
        ImageStamper imageStamp = new ImageStamper("XorImage.png")
        {
            VerticalAlignment = VerticalAlignment.Middle,
        };
        pdf.SaveAs("XorImagePDF.pdf");
        Console.WriteLine("PDF with XOR-modified image created.");
    }
}
using IronPdf;
using IronPdf.Editing;
using System;
using System.Drawing;
using System.Text;
class Program
{
    static Bitmap XorImage(Bitmap image, byte key)
    {
        for (int y = 0; y < image.Height; y++)
        {
            for (int x = 0; x < image.Width; x++)
            {
                Color pixel = image.GetPixel(x, y);
                Color newPixel = Color.FromArgb(pixel.A, pixel.R ^ key, pixel.G ^ key, pixel.B ^ key);
                image.SetPixel(x, y, newPixel);
            }
        }
        return image;
    }
    static void Main()
    {
        var pdf = new PdfDocument(270, 270);
        Bitmap image = new Bitmap("example_image.png");
        Bitmap encodedImage = XorImage(image, 0x55);
        encodedImage.Save("XorImage.png");
        ImageStamper imageStamp = new ImageStamper("XorImage.png")
        {
            VerticalAlignment = VerticalAlignment.Middle,
        };
        pdf.SaveAs("XorImagePDF.pdf");
        Console.WriteLine("PDF with XOR-modified image created.");
    }
}
Imports IronPdf
Imports IronPdf.Editing
Imports System
Imports System.Drawing
Imports System.Text
Friend Class Program
	Private Shared Function XorImage(ByVal image As Bitmap, ByVal key As Byte) As Bitmap
		For y As Integer = 0 To image.Height - 1
			For x As Integer = 0 To image.Width - 1
				Dim pixel As Color = image.GetPixel(x, y)
				Dim newPixel As Color = Color.FromArgb(pixel.A, pixel.R Xor key, pixel.G Xor key, pixel.B Xor key)
				image.SetPixel(x, y, newPixel)
			Next x
		Next y
		Return image
	End Function
	Shared Sub Main()
		Dim pdf = New PdfDocument(270, 270)
		Dim image As New Bitmap("example_image.png")
		Dim encodedImage As Bitmap = XorImage(image, &H55)
		encodedImage.Save("XorImage.png")
		Dim imageStamp As New ImageStamper("XorImage.png") With {.VerticalAlignment = VerticalAlignment.Middle}
		pdf.SaveAs("XorImagePDF.pdf")
		Console.WriteLine("PDF with XOR-modified image created.")
	End Sub
End Class
$vbLabelText   $csharpLabel

Salida de imagen XOR

C# XOR (Cómo funciona para desarrolladores): Figura 5 - Salida de imagen XOR

Añadir desde PixabaySubir

o arrastre y suelte una imagen aquí

Texto alternativo claro

Este enfoque altera los colores de los píxeles utilizando XOR, asegurando que la imagen aparezca desordenada a menos que se decodifique con la clave correcta.

XOR para el manejo de metadatos PDF

Los metadatos de PDF a menudo contienen información importante que puede necesitar ser ocultada. El XOR se puede aplicar a los campos de metadatos para hacerlos ilegibles sin la clave de descifrado.

Ejemplo: Cifrado XOR de Campos de Metadatos PDF

using IronPdf;
using System;
using System.Text;
class Program
{
    static string XorEncryptDecrypt(string input, char key)
    {
        StringBuilder output = new StringBuilder();
        foreach (char c in input)
        {
            output.Append((char)(c ^ key));
        }
        return output.ToString();
    }
    static void Main()
    {
        var pdf = new PdfDocument(270, 270);
        pdf.MetaData.Author = XorEncryptDecrypt("John Doe", 'K');
        pdf.MetaData.Title = XorEncryptDecrypt("Confidential Report", 'K');
        pdf.SaveAs("XorMetadata.pdf");
        Console.WriteLine("PDF with XOR-encoded metadata created.");
    }
}
using IronPdf;
using System;
using System.Text;
class Program
{
    static string XorEncryptDecrypt(string input, char key)
    {
        StringBuilder output = new StringBuilder();
        foreach (char c in input)
        {
            output.Append((char)(c ^ key));
        }
        return output.ToString();
    }
    static void Main()
    {
        var pdf = new PdfDocument(270, 270);
        pdf.MetaData.Author = XorEncryptDecrypt("John Doe", 'K');
        pdf.MetaData.Title = XorEncryptDecrypt("Confidential Report", 'K');
        pdf.SaveAs("XorMetadata.pdf");
        Console.WriteLine("PDF with XOR-encoded metadata created.");
    }
}
Imports IronPdf
Imports System
Imports System.Text
Friend Class Program
	Private Shared Function XorEncryptDecrypt(ByVal input As String, ByVal key As Char) As String
		Dim output As New StringBuilder()
		For Each c As Char In input
			output.Append(ChrW(AscW(c) Xor AscW(key)))
		Next c
		Return output.ToString()
	End Function
	Shared Sub Main()
		Dim pdf = New PdfDocument(270, 270)
		pdf.MetaData.Author = XorEncryptDecrypt("John Doe", "K"c)
		pdf.MetaData.Title = XorEncryptDecrypt("Confidential Report", "K"c)
		pdf.SaveAs("XorMetadata.pdf")
		Console.WriteLine("PDF with XOR-encoded metadata created.")
	End Sub
End Class
$vbLabelText   $csharpLabel

Salida

C# XOR (Cómo funciona para desarrolladores): Figura 6 - Salida de metadatos codificados con XOR

Añadir desde PixabaySubir

o arrastre y suelte una imagen aquí

Texto alternativo claro

Aquí, los campos de metadatos están cifrados con XOR, lo que impide el acceso fácil a la información sensible.

Mejores prácticas y limitaciones

Cuándo usar XOR en el procesamiento de PDF

  • Ofuscación ligera de texto, imágenes y metadatos
  • Técnicas simples de marca de agua
  • Cifrado básico donde no se requiere alta seguridad

Preocupaciones de seguridad y alternativas

  • XOR no es un método de encriptación fuerte y no debe usarse para asegurar información altamente sensible.
  • Para una mayor seguridad, considere el cifrado AES o las funciones de protección con contraseña de PDF.

Consideraciones de rendimiento en archivos PDF grandes

  • Las operaciones XOR en archivos PDF grandes, especialmente en imágenes, pueden afectar el rendimiento.
  • Considere optimizar aplicando XOR a elementos selectivos en lugar de a PDFs completos.

Conclusión

XOR es una técnica simple pero efectiva para operaciones lógicas a nivel de bits, insertar marcas de agua y manejar metadatos en archivos PDF. Al aplicar transformaciones XOR a texto, imágenes y metadatos, los desarrolladores pueden crear PDFs con ofuscación reversible. Sin embargo, para necesidades de seguridad más elevadas, se deben utilizar métodos de cifrado más fuertes.

Al comprender cómo funcionan los operadores lógicos a nivel de bits, la precedencia de operadores y las expresiones booleanas en C#, los desarrolladores pueden utilizar eficazmente XOR con IronPDF en diversas aplicaciones prácticas. ¿Aún no tienes IronPDF? Prueba la versión de prueba gratuita para ver cómo IronPDF puede llevar tus proyectos PDF al siguiente nivel hoy mismo.

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
C# ObservableCollection (Cómo funciona para desarrolladores)
SIGUIENTE >
Interbloqueo en C# (Cómo Funciona para Desarrolladores)
OSZAR »