Free Pascal — запрос решения проблем (не синтаксис) — как подойти к следующему этапу этого цикла

У меня больше вопрос о «решении проблемы», чем проблема, связанная с синтаксисом.

Вкратце, я создаю программу, которая будет читать текстовый файл, полный слов (это может быть список паролей), по одному слову в строке — я буду использовать ReadLn для этого бита в цикле. Я хочу, чтобы к каждому найденному слову добавлялось «количество» запутывания в соответствии с тем, как пользователи в наши дни будут использовать «3» вместо «E» в своих паролях или «1» вместо «I». Я работаю в области ИТ-безопасности, и взлом паролей часто является частью этого, и для этого предназначена программа.

Мне удалось создать программу до сих пор, что она генерирует таблицу 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));       

Моя проблема такова: например, учитывая слово «Эдвард», как мне решить, до какого уровня я должен его запутать? Просто первую букву «Е» заменить на «3», и ничего больше, может быть? Или первые две буквы «E» и «d» должны быть заменены ВСЕМИ значениями в таблице LEET для обеих букв E и d (это означает, что из «Эдвард» будут сгенерированы десятки новых слов и т. д.), или все значения для 'E', но ничего больше... список можно продолжить. Потенциально для каждого слова я мог бы создать тысячи дополнительных! 100-гигабайтный исходный файл скоро станет терабайтным!

Другими словами, мне нужно установить «уровень», на котором программа будет работать, который может решить пользователь. Но я не уверен, как структурировать этот уровень?

Так что я не уверен, как заставить его работать? Я действительно не думал об этом достаточно, прежде чем я начал. Моими первоначальными мыслями были: «Было бы здорово иметь программу, которая брала бы индекс слов с компьютера, а затем генерировала бы варианты каждого слова для учета людей, которые запутывают символы». но, приступив к его кодированию, я понял, что это большая работа, чем я думал, и теперь я застрял в разделе, посвященном фактическому «ОСТАВЛЕНИЮ моего входного файла»!


person Gizmo_the_Great    schedule 27.05.2011    source источник


Ответы (1)


Вы можете использовать уровень (0-10) в качестве входных данных. 0: ничего не заменять 10: заменять все буквы буквами LEET.

В зависимости от длины слова вы рассчитываете, сколько букв нужно заменить, и просто заменяете случайные буквы в слове, чтобы не всегда заменять первую букву для уровня 1 и т. д.

person Birger    schedule 28.05.2011
comment
Да, пища для размышлений, конечно. Спасибо - person Gizmo_the_Great; 10.06.2011