|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"超暗号化Ex"
294,301,309のJ-OH!さんMISOさんのを参考にしました。
全角半角完全対応!!
「欠点」長さが2倍になる。。。。。
const AngoTable = '?????????????----------?????????????';
// 16文字以上のアスキー文字。適当に変えて鍵にする。
// このままじゃ使えません。同じ文字が入らないように。
// 大文字小文字の混在は可。
function Angoka(const Hirabun : String) : String;
var An, Hi : array[0..1023] of Char;
i, u, P1, P2 : integer;
buf : Char;
begin
StrPCopy(Hi, Hirabun);
An := '';
i := 0;
while Hi[i] <> #0 do begin
An[i*2 ] := AngoTable[ Ord(Hi[i]) div length(AngoTable) +1];
An[i*2+1] := AngoTable[ Ord(Hi[i]) mod length(AngoTable) +1];
inc(i);
end;
An[i*2] := #0;
RandSeed := Ord(AngoTable[1])*3 +Ord(AngoTable[2]);
Form1.caption := inttostr(i*2);
for u := 0 to 99 do begin
P1 := random(i*2);
P2 := random(i*2);
buf := An[P1];
An[P1] := An[P2];
An[P2] := buf;
end;
result := An;
end;
function Fukugoka(const Angobun : String) : String;
var An, Hi : array[0..255] of Char;
i : integer;
buf : Char;
ListA, ListB : array[0..99] of integer;
begin
StrPCopy(An, Angobun);
RandSeed := Ord(AngoTable[1])*3 +Ord(AngoTable[2]);
Form1.caption := inttostr(Length(Angobun));
for i := 0 to 99 do begin
ListA[i] := random(Length(Angobun));
ListB[i] := random(Length(Angobun));
end;
for i := 99 downto 0 do begin
buf := An[ListA[i]];
An[ListA[i]] := An[ListB[i]];
An[ListB[i]] := buf;
end;
Hi := '';
for i := 0 to Length(An)div 2-1 do begin
Hi[i] := Chr( (Pos(An[i*2 ], AngoTable)-1)*length(AngoTable)
+(Pos(An[i*2+1], AngoTable)-1)
);
end;
Hi[Length(An)div 2] := #0;
result := Hi;
end;
(例)
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := Angoka(Edit1.Text);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit3.Text := Fukugoka(Edit2.Text);
end;
# もっと気の効いた例を作れって?
# コードの書き方ってみんなそれぞれですよね。
# 「Borland推奨」ってあんのかな??
Original document by Ts 氏 ID:(JAF10202)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|