Home / 記事 / 情報セキュリティ / アプリケーションセキュリティ / 第 8 章 : 暗号化(書籍のプレビュー) / XOR 演算

e知識「e-chishiki.com」では、インドでの著名なIT著者、IT教育者、eセキュリティーの大家により作成された様々な種類のプログラミング言語に関する技術的なコンテンツを知識情報データーベースとして提供します。

オンライン書籍; Microsoft .NET Web アプリケーションセキュリティ

第 8 章 : 暗号化(書籍のプレビュー)

Microsoft .NET Web アプリケーションセキュリティ
Microsoft .NET Web アプリケーションセキュリティ


インドの情報セキュリティの大家が書き下ろした最新のセキュリティ書籍の一部をオンライン書籍としてご紹介します。書籍の情報は、こちらをご覧ください

XOR 演算

c:\ に encrypt という名前のディレクトリを作成し、次のプログラムを c.cs に入力します。

c.cs
using System;
class zzz
{
public static void Main()
{
int i,j,k;
i = 60;
j = 96;
k = i ^ j;
Console.WriteLine("k={0}",k);
Console.WriteLine("i ^ k j={0}", i ^ k );
Console.WriteLine("j ^ k i={0}", j ^ k );
}
}

コマンド プロンプト ウィンドウ
C:\encrypt> csc c.cs
C:\encrypt>c
k=92
i ^ k j=96
j ^ k i=60

XOR 演算は、すべての暗号化の核心部分です。ビットごとの xor を計算する ^ 演算子を 2 つの値 i (60) と j (96) に対して使用し、結果を変数 k に格納します。元の値に戻すには、k と i の xor を計算すると j になり、k と j の xor では i になります。

ある値と別の値の xor を計算すると、結果の数値は暗号化された値になります。そして、この暗号化された値と元の値のいずれかとの間で xor を計算すると、もう一方の値が得られます。これは最も簡単な暗号化の 1 つであり、長い間生き残っています。

次のプログラムは前のプログラムを拡張したもので、データベースの文字列の xor を計算しています。

c.cs
using System;
using System.Text;
class zzz
{
public static void Main()
{
String s = "database=localhost;uid=sa;pwd=vmukhi";
string t = yyy.XOR(s,34);
Console.WriteLine(t);
string t1 = yyy.XOR(t,34);
Console.WriteLine(t1);
}
}
public class yyy
{
public static string XOR(string tt, int key)
{
StringBuilder i = new StringBuilder(tt);
StringBuilder o = new StringBuilder(tt.Length);
char c;
for (int ii = 0; ii < tt.Length; ii++)
{
c = i[ii];
c = (char)(c ^ key);
o.Append(c);
}
return o.ToString();
}
}

コマンド プロンプト ウィンドウ
C:\encrypt>c
FCVC@CQG▼NMACNJMQV↓WKF▼QC↓RUF▼TOWIJK
database=localhost;uid=sa;pwd=vmukhi

このプログラムでは、データベースの文字列のビットごとの xor 演算を実行する静的関数 XOR を使用しています。このメソッドは、xor 演算を行う文字列とキーの 2 つのパラメータを受け取り、暗号化された文字列を返します。このパラメータには、パスワードや数値を指定できます。関数は文字列を 1 バイトずつ読み取るので、バイトの配列に格納する必要があります。もう 1 つの方法は、プログラムで示されているように StringBuilder クラスに文字列を渡すものです。

XOR 関数では、i は StringBuilder 型であり、パラメータ tt で指定する文字列に初期化されます。その後、StringBuilder オブジェクトの o が作成されます。このオブジェクトは値を持たず、パラメータ文字列 tt と同じ長さです。StringBuilder クラスの Length 関数を使用すると、文字列の長さがわかります。

オブジェクトを初期化したら、StringBuilder クラスのインデクサを使用して、文字列のすべてのバイトを移動します。バイトとキーの xor を計算し、結果の値を char オブジェクトの c に格納します。次に、StringBuilder オブジェクトの Append メソッドを使用して、この文字をオブジェクトの o に追加します。

ToString メソッドは、Main 関数で文字列 t に割り当てられた StringBuilder オブジェクトから実際の文字列を回復します。表示される文字列は、暗号化された文字を示します。この暗号化された文字列と同じキーの xor を計算すると、元のデータベース文字列が返されます。

短時間で簡単に保護できますが、強引に破られるおそれがあります。

コメント

コメントするにはログイン、もしくはユーザ登録を行ってください。

発売中

LET US C(上)
インド人ITエンジニアのCプログラミングのバイブル。通算100万冊以上売れています。
― 2,520円 ―

Y. Kanetkar

発売中

Introduction to Object Oriented Programming & C++
C++を例に、多彩なサンプルコードと簡潔な説明でOOPプログラミングの実際が理解できる。
2,940

Y. Kanetkar

発売中

Microsoft .NET Web Application Security
APプログラムの作り方で不正侵入の防御率を向上させる手法を解説。今までにないセキュリティーの手法を紹介します。
3,990円

Vijay Mukhi

2008年の11月発売予定

Quest C++ ビジュアルラーニングコース
これがあれば、見て聞くだけで楽しみながらプログラミングテクニックが身につきます。
― 9,975円 ―

Y. Kanetkar Asang Dani

2008年の11月発売予定

Programmer's Guide to Web Application Security
Web System への侵入方法と原理を解説する事により、防止方法を理解することが出来る。
3,990

Vijay Mukhi

フォーラムの最新ポスト