У меня больше вопрос "решения проблем", чем проблема, связанная с синтаксисом.
Вкратце, я создаю программу, которая будет читать текстовый файл, состоящий из слов (которые могут быть списком паролей), по одному слову в строке - я буду использовать 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 ГБ скоро станет терабайтом!
Другими словами, мне нужно установить «уровень», для которого будет работать программа, который может решать пользователь. Но я не уверен, как структурировать этот уровень?
Так что я не уверен, как заставить это работать? Я действительно не продумал это достаточно, прежде чем я начал. Мои первые мысли были: «Было бы здорово иметь программу, которая будет брать индекс слов с компьютера, а затем генерировать варианты каждого слова для учета людей, которые запутывают символы». но, придя к его написанию, я понял, что это большая работа, чем я думал, и теперь я застрял в разделе «LEETing my input file»!