テキストのXOR暗号化
100 TextXOR 動作確認 Delphi2007 更新日 2010/06/25(金)

テキストファイルの簡単な暗号化として
XORによる暗号化があります。

何かの値をキーにしてテキストにXORをかけると暗号化され
同じ値で暗号化されたテキストにXORをかけると復元されます。

StringにXOR暗号を行なう関数を作ってみました。

Buttonを押すと
Edit1に元文字列
Edit2が暗号化テキスト
Edit3に復元文字列が入ります。

────────────────────
{-------------------------------
//  StrXor
機能:       XOR暗号化を行なう
引数説明:   Source: 変換する文字
            CipherKey: XORするキーコード
戻り値:     暗号化した文字列
処理:       文字列を一文字ずつXORする
備考:       暗号化後にCRLFコードが入る場合があるので
            ファイルの保存/読み出しには気をつけること
履歴:       2001/07/17
//------------------------------}
function StrXor(const Source: String; CipherKey: Word): String;
var
  i: Integer;
begin
  Result := '';
  for i := 1 to Length(Source) do
  begin
    Result := Result + Chr(Integer(Source[i]) xor Integer(CipherKey));
  end;
end;

//-------------------------------
//キーワードからword型整数を戻す関数
function XorKeyWord(Source: String): word;
var
 xor_pass: Integer;
 i: Integer;
begin
 xor_pass := 0;
 for i := 1 to Length(Source) do
 begin
   xor_pass := xor_pass + Ord(Source[i]);
 end;
 Result := xor_pass;
end;
//------------------------------


//-------------------------------
//テストコード
procedure TForm1.Button1Click(Sender: TObject);
var
  SourceStr, XorStr, Xor2Str: String;
  CipherKey: Word;
const
  CipherKeyStr: String = 'AAA';
begin
  CipherKey := XorKeyWord(CipherKeyStr);

  SourceStr := Edit1.Text;
  XorStr := StrXor(SourceStr, CipherKey); //XORで変換

  Edit2.Text := XorStr;

  Xor2Str := StrXor(XorStr, CipherKey); //XORで変換

  Edit3.Text := Xor2Str;
end;
────────────────────
暗号化したときにCrやLfのコードが入る場合があり

暗号化したテキストをTStringListを用いてファイル保存すると
CR>>CRLF もしくは LF>>CRLF と変換されてしまい

暗号化が崩れてしまうのでファイルへのの保存と復帰をする時には
その点に気をつけてください。

こちらのユニット
AnsiStringFileUnit.pas
の SaveStringToFile / LoadStringFromFile を使うとCRLFが変換されずに
ファイルへの保存と読込ができます。