テキストの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が変換されずに
ファイルへの保存と読込ができます。
|