透かしなしで本番環境でテストしてください。
必要な場所で動作します。
30日間、完全に機能する製品をご利用いただけます。
数分で稼働させることができます。
製品トライアル期間中にサポートエンジニアリングチームへの完全アクセス
C#でPDFを操作する際には、セキュリティとデータ操作が重要な課題です。 軽量暗号化およびデータ変換のための効果的な技術の一つは、ビット単位のXOR演算です。 この技術は、論理演算、データの難読化、およびウォーターマーキングに広く使用されています。
IronPDFは、PDFを扱う強力なC#ライブラリであり、開発者がビット単位の論理演算子をPDFワークフローに統合することを可能にします。 論理XOR演算子を活用することで、PDF内のテキスト、画像、メタデータに変換を適用することができます。
このガイドでは、IronPDFを使ってPDF処理にどのように適用するかを探ります。
XOR(論理排他的 OR 演算子としても知られる)は、コード内で '^' 記号で表され、ビット単位の XOR 演算を実行するために使用される二項演算です。 では、論理 OR 演算子とはどのように異なるのでしょうか? これらの2つの演算子は似た名前を持っていますが、XORの演算子名における「exclusive」という単語の使用が、これら2つを区別する要因です。 論理和演算子は、包含的なオペランドであり、AND/OR演算子として見られることが多いです。これは、2つのオペランドのうち1つまたは両方が真であれば、真を返します。
一方、XORは少し異なる方法で動作します。 このビット単位演算子はブール値を評価し、2つのオペランドのうちどちらか一方がtrueを返す場合にのみtrueを返します。 両方の選択肢が同じ結果を返した場合、false を返します。
より簡略化した概要として、XORの動作を示す真理値表を見てみましょう。
in1
in2
出力
1
1
1
1
1
1
一方、ORはこのように機能します:
in1
in2
出力
1
1
1
1
1
例えば:
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
壊れた画像
代替テキストをクリア
ブール式では、XORをブールオペランドに適用できます。
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
Pixabay から追加アップロード
またはここに画像をドラッグアンドドロップします
代替テキストをクリア
ここでは、ビット演算を使用して2つのオペランドを比較します。 右のオペランドは左と異なるため、出力が真であることが保証されます。 第二オペランドが最初のオペランドと同じであった場合、falseを見たでしょう。
ビットごとのXOR演算は、算術演算子よりも演算子の優先順位が低いですが、ビットごとの補数(~)や論理否定(!)よりも高いです。
例えば:
int x = 5 ^ 2 + 3;
Console.WriteLine(x); // Output: 0
int x = 5 ^ 2 + 3;
Console.WriteLine(x); // Output: 0
CONVERTER NOT RUNNING
壊れた画像
画像の代替テキストを追加
+(加算)は、^(ビット単位の排他的論理和)よりも優先順位が高い。
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
XORは同じ操作でデータをエンコードおよびデコードできるため、軽量な暗号化にしばしば使用されます。 AES暗号化と比較すると強力なセキュリティ対策とは言えませんが、PDF内容をすばやく難読化する方法を提供します。
XOR は、画像ベースの透かしの表示を動的に切り替えるために使用できます。 例えば、透かしはXORを使用してエンコードでき、既知のキーを適用した場合にのみ表示可能になります。 この同じ方法をテキストベースの透かしやスタンプに適用することができます。
PDFメタデータには、ドキュメントの作成者、作成日、および他の識別情報などの機密情報が含まれていることがあります。 XORはデコードしない限り読み取れないようにするために、メタデータフィールドに適用することができます。
テキストをPDFに挿入する前にXORを適用することで、基本的な難読化が可能になります。 次の例では、このプロセスに関与するコードを詳しく見ていきます。
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
出力
Pixabay から追加アップロード
またはここに画像をドラッグアンドドロップします
代替テキストをクリア
ここでは、XOR関数を使用してテキストを難読化し、PDFに挿入する前に処理します。 同じ関数は、同じキーで再びXORを適用することでそれを復号化できます。
XORは、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
XOR 画像出力
Pixabay から追加アップロード
またはここに画像をドラッグアンドドロップします
代替テキストをクリア
このアプローチは、XORを使用してピクセルの色を変更し、正しいキーでデコードされない限り、画像がスクランブルされて表示されるようにします。
PDFメタデータには、秘匿される必要がある可能性のある重要な情報が含まれていることがよくあります。 XORをメタデータフィールドに適用して、復号キーがないと読み取れないようにすることができます。
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
出力
Pixabay から追加アップロード
またはここに画像をドラッグアンドドロップします
代替テキストをクリア
ここでは、メタデータフィールドがXOR暗号化されており、機密情報への容易なアクセスを防ぎます。
XORは、PDFのビット単位の論理操作、透かし、メタデータ処理において簡単でありながら効果的な手法です。 テキスト、画像、およびメタデータにXOR変換を適用することにより、開発者は可逆的な難読化を持つPDFを作成できます。 しかし、より高いセキュリティが必要な場合は、より強力な暗号化方法を使用するべきです。
C#でビット単位の論理演算子、演算子の優先順位、およびブール式の動作を理解することで、開発者はIronPDFとXORをさまざまな実用的なアプリケーションで効果的に使用できます。 まだIronPDFをお持ちでないですか? 無料トライアルを試して、IronPDFがあなたのPDFプロジェクトをどのように次のレベルへと導くかを今日確認してください!