У меня больше вопрос о «решении проблемы», чем проблема, связанная с синтаксисом.
Вкратце, я создаю программу, которая будет читать текстовый файл, полный слов (это может быть список паролей), по одному слову в строке — я буду использовать 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-гигабайтный исходный файл скоро станет терабайтным!
Другими словами, мне нужно установить «уровень», на котором программа будет работать, который может решить пользователь. Но я не уверен, как структурировать этот уровень?
Так что я не уверен, как заставить его работать? Я действительно не думал об этом достаточно, прежде чем я начал. Моими первоначальными мыслями были: «Было бы здорово иметь программу, которая брала бы индекс слов с компьютера, а затем генерировала бы варианты каждого слова для учета людей, которые запутывают символы». но, приступив к его кодированию, я понял, что это большая работа, чем я думал, и теперь я застрял в разделе, посвященном фактическому «ОСТАВЛЕНИЮ моего входного файла»!