Pruebe en producción sin marcas de agua.
Funciona donde lo necesite.
Obtén 30 días de producto totalmente funcional.
Ténlo en funcionamiento en minutos.
Acceso completo a nuestro equipo de asistencia técnica durante la prueba del producto
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.
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
'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
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.
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
'Imagen rota'
Agregar texto alternativo de la imagen
(Adición) tiene mayor precedencia que ^ (XOR a nivel de bits).
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
5 = 00000101
5 = 00000101
-------------
XOR = 00000000 (Decimal 0)
5 = 00000101
5 = 00000101
-------------
XOR = 00000000 (Decimal 0)
CONVERTER NOT RUNNING
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 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.
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.
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.
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
Salida
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 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.
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
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.
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.
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
Salida
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.
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.