4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 14 августа 2007 13:01
Да если ты не гонишься за сверхскоростью, то все предельно просто:
Тебе потребуется переменная-строка со всеми символами, которые нужно использовать в пароле, строка с паролем, и переменная-массив, длина которой не меньше максимальной длины генерируемого пароля. В массиве ты будешь хранить текущий символ для каждой позиции
Внешний цикл — это проход от минимальной длины до максимальной.
Второй цикл — это проход от единицы до текущей длины (значения переменной внешнего цикла), плюс в
Внутренний цикл — это заполнение строки с паролем символами.
Т.е. получаем примерно следующее (если писать на Pascal):
var
Pass : string;
Symbols : string;
BEGIN
for i:=Min_length to Max_Length do begin
for j:=1 to i do Pass[j]:=Symbols[1];
for j:=1 to i do begin
for l:=1 to j do begin
for k:=1 to StrLen(Symbols) do begin
Pass[l]:=Symbols[k]; // помещаем в текущую позицию пароля очередной символ
// сохранение полученного пароля в файл
end;
end;
end;
end;
Если же требуется какое-то более сложное условие (например, чтобы часть символов использовалась только в середине пароля), то перед сохранением нужно поставить проверку доп. условий.
Возможно, можно придумать и более эффеективный пособ выборки для сложных условий, но это надо думать.
P.S. Алгоритм не тестировал, возможно, где-то есть ошибки.
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
|