#for-loop #freepascal
#для цикла #freepascal
Вопрос:
У меня больше вопрос о «решении проблем», чем проблема, связанная с синтаксисом.
Вкратце, я создаю программу, которая будет считывать текстовый файл, полный слов (которые могут быть списком паролей), по одному слову в строке — я буду использовать 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));
Моя проблема заключается в следующем: учитывая слово ‘Edward’, например, как мне решить, до какого уровня я должен его запутать? Возможно, просто первую букву «E» заменить на «3», и ничего больше? Или первые две буквы ‘E’ и ‘d’ должны быть заменены ВСЕМИ значениями в таблице LEET для обеих букв E и d (что означает, что из ‘Edward’ будут сгенерированы десятки новых слов и т.д.), Или все значения для ‘E’, но ничего больше … список можно продолжить. Потенциально, для каждого слова я мог бы создать тысячи дополнительных! Исходный файл объемом 100 ГБ вскоре стал бы терабайтом!
Другими словами, мне нужно установить «уровень», для которого программа будет функционировать, который может решить пользователь. Но я не уверен, как структурировать этот уровень?
Итак, я не уверен, как заставить это работать? Я действительно недостаточно все обдумал перед началом. Мои первоначальные мысли были «Было бы здорово иметь программу, которая брала бы индекс слов с компьютера, а затем генерировала варианты каждого слова для учета людей, которые запутывают символы». но, приступив к его написанию, я понял, что это более сложная работа, чем я думал, и теперь я застрял на разделе для фактического «сохранения моего входного файла»!
Ответ №1:
Вы могли бы использовать уровень (0-10) в качестве входных данных. 0: ничего не заменять 10: замените все буквы буквами LEET.
В зависимости от длины слова вы вычисляете, сколько букв нужно заменить, и просто заменяете случайные буквы в слове, так что вы не всегда заменяете первую букву для уровня 1 и т.д.
Комментарии:
1. Да, пища для размышлений, конечно. Спасибо