Перейти к содержимому
Doob

Распараллеливание брутфорса в OpenComputers

Рекомендуемые сообщения

С выпиливанием вайтлиста стало как-то скучно.

 

В общем имеем код "сжималки" с рабочим названием "Popoff2"

local data = require('data')

local function compress(str)

  local list = ''

  for i = 1, #str do
    if string.find(list, string.sub(str, i, i)) == nil then
      list = list .. string.sub(str, i, i)
    end
  end

  local lhex = string.format('%x', #str)

  for j = 1, 8-#lhex do
    lhex = '0' .. lhex
  end

  return data.md5(str) .. data.fromHex(lhex) .. list

end

Суть алгоритма:

К примеру, закодируем строку 'helloworld' (строка короткая, сжатия нет, зато перебор быстрый)
Получаем хеш и размер строки в двоичном виде (для примера размер указываем в четырех байтах), в конец добавляем используемые символы
[FC5E038D38A57032085441E7FE7010B0] [0000000A] [lowerdh] = 24 байта из 10, но это всего-лишь пример (вообще, можно указать количество повторений для каждого символа, тогда на пермутациях можно выиграть очень много времени, а исходные данные предварительно жать через deflate)

 

Чтобы вернуть исходные данные, надо перебором генерировать из указанных символов последовательность, указанной длинны. Очень неэффективно, но не в этом суть.

 

 

 

Нужен алгоритм, при помощи которого можно подбирать исходные данные на нескольких устройствах несвязанных во времени и пространстве, т. е. чтобы диапазоны перебора предварительно разбивались на блоки, которые алгоритм будет обрабатывать отдельно.

 

Какие есть предложения?

Изменено пользователем Doob

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я с помощью такого метода, словил сообщение в 1 ивенте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что если на одном компьютере начинать перебор с начала (00000000-1111111), а на другом с конца (11111111-00000000)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что если на одном компьютере начинать перебор с начала (00000000-1111111), а на другом с конца (11111111-00000000)?

 

Долго же. А что если у меня 15 компьютеров?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Долго же. А что если у меня 15 компьютеров?

Разбить куски на части,обработать,потом скрепить обратно.

100011110000 разбиваем на

1000

1

1

1

10000

перебираем,потом скрепляем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

На мой взгляд не имеет смысла таким образом хранить данные. Слишком высокая цена восстановления, несоизмеримые затраты времени. Для такой задачи используют обычно программу на Си и технологию CUDA. На процессорах нет никакого смысла брутить

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

...Слишком высокая цена восстановления, несоизмеримые затраты времени...

 

В некоторых задачах это единственный способ.

Сжималка это только пример, мне нужны способы разбиения словаря для брута на равные блоки, без предварительно генерации самого словаря.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В некоторых задачах это единственный способ.

Сжималка это только пример, мне нужны способы разбиения словаря для брута на равные блоки, без предварительно генерации самого словаря.

Хеш довольно затруднительно разбивать на части, но можно стартовать с разных мест. Допустим один компьютер подбирает от начала до какого то лимита, другой компьютер от этого лимита до еще какой то границы и так далее. Есть вариант сделать динамическое подключение компьютеров, но все же подбор будет крайне не эффективным на процессоре. А если запускать на сервере - он просто залагает от нагрузки. Луа не тот язык, на котором стоит делать такого рода софт :)

 

 

PS: Реальный прирост производительности будет равен количеству физических ядер, если нет критичных bottleneck'ов

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, это все очевидно, но для моей задачи задействовать видеокарту довольно трудно, потому-что надо подбирать код, который будет оптимально работать в minecraft мире.

В общем, мне нужен редактор генетического кода для саморазвивающихся роботов, общий объем 8 килобайт, для мутации в пределах развитого поколения от 12 до 100 байт, на создание жизнеспособного проекта уйдет от 300k до 800k часов, даже с читерским ускорителем, поэтому надо задать точку отсчета, чтобы роботы развивались не с нуля.

 

Хотя, я прекрасно знаю, что этот способ тупиковый и сама идея тоже.

Робот, после появления обращается к коду в каждой ситуации, т. е. извлекает инструкции предков и пытается применить их в подходящих ситуациях, в пределах одного поколения, роботы голосуют за наиболее успешные участки кода и передают их в следующее поколение, если использовать ускоритель, то голосование между серверами будет невозможно (следовательно, тоже нужен алгоритм разбиения на блоки)

 

Но в конечном итоге все сводится к клеточным автоматам, хоть и довольно сложным, но бессмысленным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...