AIDE .NET

C# XOR (Comment cela fonctionne pour les développeurs)

Introduction

Lorsque vous travaillez avec des PDF en C#, la sécurité et la manipulation des données sont des préoccupations importantes. Une technique efficace pour le chiffrement léger et la transformation des données est l'opération bitwise XOR. Cette technique est largement utilisée dans les opérations logiques, l'obfuscation de données et le filigrane.

IronPDF, une puissante bibliothèque C# pour la gestion des PDF, permet aux développeurs d'intégrer des opérateurs logiques au niveau des bits dans les flux de travail PDF. En tirant parti de l'opérateur logique XOR, nous pouvons appliquer des transformations au texte, aux images et aux métadonnées dans les PDF.

Dans ce guide, nous explorerons comment IronPDF.

Comprendre XOR en C

Qu'est-ce que le XOR ?

XOR (également connu sous le nom d'opérateur logique OU exclusif) est représenté dans le code par le symbole '^', et est une opération binaire utilisée pour effectuer des opérations au niveau des bits XOR. Alors, en quoi est-il différent de l'opérateur OU logique ? Bien que ces deux opérateurs partagent un nom similaire, l'utilisation du mot 'exclusive' dans le nom de l'opérateur XOR est ce qui les distingue. L'opérateur logique OU est plus un opérande inclusif, vu davantage comme un opérateur ET/OU, où il retournera vrai si l'un ou les deux opérandes sont vrais.

XOR, en revanche, fonctionne un peu différemment. Cet opérateur binaire évalue les valeurs booléennes et ne renverra true que si l'un des deux opérandes fournis renvoie true. Si les deux choix donnent le même résultat, cela retourne faux.

Pour un aperçu plus simplifié, examinons une table de vérité qui démontre comment XOR fonctionne :

in1

in2

sortie

1

1

1

1

1

1

Tandis que OR fonctionne ainsi :

in1

in2

sortie

1

1

1

1

1

Par exemple :

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

Image cassée

Effacer le texte alternatif

Dans les expressions booléennes, l'opérateur XOR peut être appliqué aux opérandes booléens :

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 (Comment cela fonctionne pour les développeurs) : Figure 2 - sortie de l'expression booléenne

Ajouter depuis PixabayTéléverser

ou faites glisser et déposez une image ici

Effacer le texte alternatif

Ici, nous utilisons une opération binaire pour comparer deux opérandes. L'opérande droit est différent de l'opérande gauche, ce qui garantit que le résultat est vrai. Si le second opérande avait été le même que le premier, nous aurions vu faux.

Priorité des opérateurs et XOR

L'opération XOR bit à bit a une priorité d'opérateur inférieure à celle des opérateurs arithmétiques mais supérieure à celle du complément bit à bit (~) et de la négation logique (!).

Par exemple :

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

Image cassée

Ajouter un texte alternatif à l'image

Précédence des opérateurs en C

  • L'opérateur + (addition) a une priorité plus élevée que ^ (XOR bit à bit).

    • Cela signifie que l'expression est évaluée comme :
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
  • Maintenant, calcul du XOR bit à bit :
5  = 00000101  
    5  = 00000101  
    -------------
    XOR = 00000000  (Decimal 0)
5  = 00000101  
    5  = 00000101  
    -------------
    XOR = 00000000  (Decimal 0)
CONVERTER NOT RUNNING
$vbLabelText   $csharpLabel
  • Résultat final : 0.

XOR pour la sécurité et le traitement des PDF

Utilisation de XOR pour le chiffrement de base dans les PDF

Puisque XOR peut encoder et décoder des données avec la même opération, il est souvent utilisé pour le chiffrement léger. Bien qu'il ne s'agisse pas d'une mesure de sécurité forte comparée au chiffrement AES, il offre un moyen rapide d'obfusquer le contenu PDF.

XOR pour le basculement de la visibilité des images

XOR peut être utilisé pour basculer dynamiquement la visibilité des filigranes basés sur des images. Par exemple, un filigrane peut être encodé en utilisant XOR, le rendant visible uniquement lorsqu'une clé connue est appliquée. Cette même méthode pourrait être appliquée aux filigranes et tampons basés sur le texte.

XOR dans l'obfuscation des métadonnées

Les métadonnées PDF contiennent souvent des détails sensibles tels que l'auteur du document, la date de création et d'autres identifiants. L'XOR peut être appliqué aux champs de métadonnées pour les rendre illisibles sans décodage.

Implémentation de XOR avec IronPDF en C

Traitement de texte PDF basé sur XOR

Appliquer XOR au texte avant de l'insérer dans un PDF peut fournir une forme basique d'obfuscation. Dans l'exemple suivant, nous examinons de plus près le code impliqué dans ce processus.

Exemple : Encodage et décodage de texte avec XOR dans 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

Sortie

XOR en C# (Comment ça fonctionne pour les développeurs) : Figure 4 - Sortie PDF de texte encodé

Ajouter depuis PixabayTéléverser

ou faites glisser et déposez une image ici

Effacer le texte alternatif

Ici, la fonction XOR est utilisée pour brouiller le texte avant de l'insérer dans un PDF. La même fonction peut le déchiffrer en appliquant à nouveau XOR avec la même clé.

XOR pour la manipulation d'images PDF

Le XOR peut également être appliqué aux images avant de les intégrer dans un PDF, en modifiant leurs valeurs de pixels afin qu'elles ne soient visibles que lorsqu'elles sont décodées.

Exemple : Appliquer l'opération XOR sur les pixels d'image avant de les insérer dans des 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

Sortie d'image XOR

C# XOR (Comment cela fonctionne pour les développeurs) : Figure 5 - Sortie d'image XOR

Ajouter depuis PixabayTéléverser

ou faites glisser et déposez une image ici

Effacer le texte alternatif

Cette approche modifie les couleurs des pixels en utilisant XOR, garantissant que l'image semble brouillée à moins d'être décodée avec la clé correcte.

XOR pour la gestion des métadonnées PDF

Les métadonnées PDF contiennent souvent des informations importantes qui peuvent nécessiter d'être obscurcies. XOR peut être appliqué aux champs de métadonnées pour les rendre illisibles sans la clé de déchiffrement.

Exemple : Chiffrement XOR des champs de métadonnées 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

Sortie

C# XOR (Comment cela fonctionne pour les développeurs) : Figure 6 - Sortie des métadonnées encodées XOR

Ajouter depuis PixabayTéléverser

ou faites glisser et déposez une image ici

Effacer le texte alternatif

Ici, les champs de métadonnées sont cryptés en XOR, empêchant l'accès facile aux informations sensibles.

Meilleures pratiques et limitations

Quand utiliser XOR dans le traitement PDF

  • Obfuscation légère du texte, des images et des métadonnées
  • Techniques simples de filigrane
  • Chiffrement basique lorsque la haute sécurité n'est pas requise

Préoccupations de sécurité et alternatives

  • XOR n'est pas une méthode de chiffrement forte et ne devrait pas être utilisée pour sécuriser des informations hautement sensibles.
  • Pour une sécurité renforcée, envisagez le chiffrement AES ou les fonctionnalités de protection par mot de passe PDF.

Considérations de performance dans les PDF volumineux

  • Les opérations XOR sur de grands fichiers PDF, en particulier les images, peuvent affecter les performances.
  • Envisagez d'optimiser en appliquant XOR à des éléments sélectifs plutôt qu'à des PDF entiers.

Conclusion

XOR est une technique simple mais efficace pour les opérations logiques au niveau des bits, le filigrane et la gestion des métadonnées dans les PDFs. En appliquant des transformations XOR au texte, aux images et aux métadonnées, les développeurs peuvent créer des PDF avec une obfuscation réversible. Cependant, pour des besoins de sécurité plus élevés, des méthodes de chiffrement plus fortes devraient être utilisées.

En comprenant comment les opérateurs logiques bit à bit, la précédence des opérateurs et les expressions booléennes fonctionnent en C#, les développeurs peuvent utiliser efficacement XOR avec IronPDF dans diverses applications pratiques. Vous n'avez pas encore IronPDF ? Essayez la version d'essai gratuite pour voir comment IronPDF peut faire passer vos projets PDF au niveau supérieur dès aujourd'hui !

Chaknith Bin
Ingénieur logiciel
Chaknith travaille sur IronXL et IronBarcode. Il possède une expertise approfondie en C# et .NET, aidant à améliorer le logiciel et à soutenir les clients. Ses idées issues des interactions avec les utilisateurs contribuent à de meilleurs produits, une documentation améliorée et une expérience globale enrichie.
< PRÉCÉDENT
C# ObservableCollection (Comment cela fonctionne pour les développeurs)
SUIVANT >
C# Interlocked (Comment cela fonctionne pour les développeurs)