Текущий архив: 2007.02.11;
Скачать: CL | DM;
ВнизПомогите оптимизировать. Найти похожие ветки
← →
optimizer (2007-01-21 19:01) [0]Удалено модератором
Примечание: Использование разных ников в пределах одной ветки
← →
transp (2007-01-21 19:02) [1]
type
TBaseType = Int64; // либо Longint, но его не хватает
TPassGen = class
...
FBaseLen: ShortInt;
FCurPass: String; // есть вариант с array of Char, но скорость не меняется
FPassBase: String;
end;
{ генерация пароля. входные параметры - Unique - некое число, которое снаружи увеличивается всегда на 1, за счет чего и генерирую пасс, PassLen - длина пароля, контролируется снаружи }
procedure TPassGen.CreatePassword(Unique: TBaseType; PassLen: Integer);
var
vMod: ShortInt;
i: Integer;
begin
i := 1;
repeat
// FBaseLen - длина словаря
vMod := Unique mod FBaseLen + 1;
// FCurPass - результат, FPassBase - словарь
FCurPass[i] := FPassBase[vMod];
Unique := Unique div FBaseLen;
i := i + 1;
until i > PassLen;
end;
простите за кривой пост. забыл какие тэги тут.
← →
tesseract © (2007-01-21 19:05) [2]> TBaseType = Int64; // либо Longint, но его не хватает
Жесть, int64 крайне медленный, у тебя словарь больше 2 ^32 ?
← →
optimizer (2007-01-21 19:10) [3]словарь (под словарем имеется в виду не файл, а алфавит по сути) у мну не большой, тестирую на 26 (латиница, верхний регистр). проблем в том что на Longint"e скорость 2.1 как раз и дает. на Int64 немного меньше (порядка 1.6-1.7 млн пар/сек)
Longint"a не хватает не из-за словаря по большей части, а из-за инкрементации Unique.
← →
Kolan © (2007-01-21 19:14) [4]«Longint"a »
Нафик он нужен? Читай справку про Integer.
← →
optimizer (2007-01-21 19:15) [5]у мну D7. Longint = Integer. RTFM.
← →
Kolan © (2007-01-21 19:19) [6]«[5] optimizer (21.01.07 19:15)
у мну D7. Longint = Integer. RTFM.»
Вот и я о том же.
Написано же: «Используйте везде…»
← →
tesseract © (2007-01-21 19:22) [7]а FCurPass[i] := random(62) - тут все возможные комбинации латиницы, чем не устраивает?
← →
optimizer (2007-01-21 19:23) [8]согласитесь, что на оптимизацию не катит?...
а longint ничем не отличается от integer"a, имхо.
плз. давайте по теме.
← →
tesseract © (2007-01-21 19:24) [9]> а longint ничем не отличается от integer"a, имхо.
не отличается, если не используешь торицательных значений, то DWORD тебе в руки.
← →
optimizer (2007-01-21 19:34) [10]tesseract
ну мы же взрослые люди. по поводу знака все ясно. тут не выиграть за счет смены BaseType. надо либо менять концепцию в корне, либо какой-нить любитель asm"а подскажет правильную идею...
← →
tesseract © (2007-01-21 19:41) [11]> надо либо менять концепцию в корне, либо какой-нить любитель
> asm"а подскажет правильную идею...
Используй, как все нормальные люди генератор случайных чисел. В delphi он имеет равномерное распределение.
← →
Servelat © (2007-01-21 19:59) [12]> снаружи нее лишь Unique := Unique + 1, и ...
А какие предубеждения мешают поместить все это вовнутрь процедуры? Как я понимаю уйдет лишний параметр Unique и не будет тучи лишних call. Тогда видимо, не нужно будет делать CreatePassword методом класса, а использовать, скажем, массив строк, в который и нагенерить паролей на здоровье. Хотя зачем генерировать 2.0 млн паролей / секунду я честно сказать не понимаю, возможно стоит лучше осветить задачу, тогда и варианты появятся.
А вообще - [11], нафик велосипеды.
← →
optimizer (2007-01-21 20:03) [13]brute-force. рандом не поможет. ровно как и массив строк.
перенести тело CreatePassword внутрь обертки - без проблем. только за счет "навесов" что дает ООП ничего не поменяется толком.
генерацию надо ускорить хотя бы до 10 млн / сек.
← →
tesseract © (2007-01-21 20:08) [14]> brute-force. рандом не поможет. ровно как и массив строк.
Тогда вопрос - чео этот код вообще делает? На брутфорс по словарю, он не тянет никаким макаром.
← →
optimizer (2007-01-21 20:13) [15]brute-force это конечная задача. необходим класс генерации пасса по условиям, который будет использован не только брутом, но и рядом других утилит.
этот код генерит пасс, как это ни странно )
← →
tesseract © (2007-01-21 20:15) [16]> необходим класс генерации пасса по условиям, который будет
> использован не только брутом, но и рядом других утилит.
Или словарь для брутфорса или random, остальное от лукавого.
← →
optimizer (2007-01-21 20:30) [17]:) не согласен. маска, генерация по условию (выбор charset"ов, мин/мах длина, диапазоны, дистрибуция и прочее), словарь.
← →
Servelat © (2007-01-21 20:32) [18]Подбирать в несколько потоков.
Не вижу большого смысла использовать ООП - зачем эти обертки если нужна скорость. Работа со строкой всяко быстрее.
Как бы я подошел. Диапазон значений Unique известен - от 0 до BaseLen ^ PassLen. Делим диапазон на n частей, каждый поток перебирает свою часть диапазона.
В потоке же генерируем строку, проверяем взломалось/не взломалось, переходим к следующей. Никакие классы не нужны. Никакого вызова процедур в цикле не нужно.
> перенести тело CreatePassword внутрь обертки - без проблем.
> только за счет "навесов" что дает ООП ничего не поменяется
> толком.
Если есть цикл, и в этом цикле вызывается процедура, то данный вариант будет выполнятся медленнее, чем если бы код процедуры присутствовал напрямую в цикле. Как минимум на одну инструкцию call медленнее. Ваши аргументы, почему "ничего не поменяется" мне не понятны.
> Тогда вопрос - чео этот код вообще делает? На брутфорс по
> словарю, он не тянет никаким макаром.
Этот код, насколько я понимаю, генерирует словарь для брутфорса полным перебором.
Страницы: 1 вся ветка
Текущий архив: 2007.02.11;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.042 c