お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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