構文関連の問題というよりも、「問題解決」の質問が多いです。
簡単に言うと、1行に1単語ずつ、単語でいっぱいのテキストファイル(パスワードのリストである可能性があります)を読み取るプログラムを作成しています。ループ内のそのビットにReadLnを使用します。見つかったすべての単語について、最近のユーザーがパスワードに「E」の代わりに「3」を使用する方法、または「I」の代わりに「1」を使用する方法に合わせて、「量」の難読化を追加したいと思います。私はITセキュリティの分野で働いており、パスワードの解読はその一部であることが多く、それがプログラムの目的です。
私はこれまで、アルファベットの文字ごとに多くの異なる値でいっぱいのLEETテーブルを生成し、プロセスの一部としてアクセスできるStringGridにそれらをスタックするようにプログラムを作成することができました(また、視覚的に出力されますテーブル)。
type
TLetters = 'A'..'Z';
TLeet = array[TLetters] of TStringList;
var
SourceFileName, str : string;
StartIndexFile : TextFile;
i : TLetters;
leet : TLeet;
s : string;
n, o, ColumnSize : integer;
begin
for i in TLetters do
leet[ i ] := TStringList.Create;
// The next sequence of loops populates the string grid by counting the number of characters for each letter of the alphabet and then inserting them down, column by column and row by row...
//Letter A:
s := '4 @ /-\ /\ ^ aye ∂ ci λ Z';
ColumnSize := wordcount(s,[' ']);
o := 0;
for n := 0 to ColumnSize do
leet['A'].Add(ExtractWord(n,s,[' ']));
for o := 0 to ColumnSize do
StringGrid1.Cells[1,o] := Leet['A'][o];
// And so on for B - Z
// ... then an OpenDialog that opens the source text file to read. Got that sorted
// A load of file opening stuff and then the obsfucation
repeat
Readln(StartIndexFile, Str);
LblProgress.Caption := ('Parsing Index File...please wait');
OBSFUCATE THE WORDS HERE TO SOME EXTENT
// but now I have hit a barrier....
until(EOF(StartIndexFile));
私の問題はこれです:たとえば、「エドワード」という単語が与えられた場合、それを難読化するレベルをどのように決定すればよいですか?最初の文字「E」を「3」に置き換えるだけで、おそらくそれ以上のことはありませんか?または、最初の2文字の「E」と「d」をLEETテーブルのすべての文字のEとdの両方の値に置き換えます(「Edward」などから数十の新しい単語が生成されることを意味します)。または「E」のすべての値ですが、他には何もありません...リストは続きます。潜在的に、すべての単語に対して、私は何千もの追加の単語を作成することができます!100Gbのソースファイルはすぐにテラバイトになります!
つまり、プログラムが機能する「レベル」を設定し、ユーザーが決める必要があります。しかし、そのレベルをどのように構成するかわかりませんか?
だから私はそれを機能させる方法がわかりませんか?始める前は、十分に考えていませんでした。私の最初の考えは、「コンピューターから単語のインデックスを取得し、文字を難読化する人々を説明するためにすべての単語のバリエーションを生成するプログラムがあればクールだ」というものでした。しかし、それをコーディングするようになったので、私はそれが思ったよりも大きな仕事であることに気づき、実際に「入力ファイルをLEETする」セクションで立ち往生しています!