Это может также быть сделано довольно легко с awk
.
$ awk '{print $2,$3,$4}' *.txt > collapsed_output.txt
Вот некоторые демонстрационные данные.
$ seq 20 | paste - - - - - > sample.txt
Вот то, на что похожи строки:
$ head sample.txt
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
Теперь давайте сделаем 10 копий:
$ seq 10 | xargs -I{} cp sample.txt sample{}.txt
У нас теперь есть следующие файлы:
$ tree
.
|-- sample10.txt
|-- sample1.txt
|-- sample2.txt
|-- sample3.txt
|-- sample4.txt
|-- sample5.txt
|-- sample6.txt
|-- sample7.txt
|-- sample8.txt
|-- sample9.txt
`-- sample.txt
Теперь, если мы выполняем наш awk
команда:
$ awk '{print $2, $3, $4}' sample{1..10}.txt | column -t
2 3 4
7 8 9
12 13 14
17 18 19
2 3 4
7 8 9
12 13 14
17 18 19
2 3 4
7 8 9
12 13 14
17 18 19
...
Здесь я показываю Вам вывод для первых 3 файлов (sample01.txt
... sample03.txt
). Также я форматирую вывод с column -t
команда, но это только в целях дисплея сделать вывод легче видеть здесь на U&L.
Дополнительное форматирование могло, так же, как легко сделанный в awk
команда, но это, казалось, выходило за рамки вопроса.
Ваша петлевая структура кажется совершенно ненужной, если вы используете расширение скобки вместо этого, она может быть сгущена так:
Я показываю 4 символа только для того, чтобы заставить ее работать быстрее, просто добавьте дополнительный [116616]{a. .z}[116617] скобки для дополнительных символов длины пароля.
Пример запускается
5 символов
Это заняло ~426 минут. На самом деле [116618]Ctrl[116619]+[116620]C[116621] это, так что это еще не закончилось, но я не хотел больше ждать!
ПРИМЕЧАНИЕ:[116623] Оба этих запуска были на этом процессоре:
Улучшение #2 - Использование nice?
Следующим логическим шагом было бы [116624]nice[116625] вышеуказанные запуска, чтобы они могли потреблять больше ресурсов.
Но это только покажет. Одним из "недостатков" вашего подхода является повторный вызов [116626]openssl[116627]. С помощью [116628]{a..z}^5[116629] вы вызываете [116630]openssl[116631] 26^5 = 11881376 раз.
Одним из основных улучшений было бы сгенерировать паттерны [116632]{a..z}....[116633] и сохранить их в файл, а затем передать их как один раз в [116634]openssl[116635]. К счастью [116636]openssl[116637] имеет 2 ключевых свойства, которые мы можем использовать, чтобы получить то, что мы хотим.
Улучшение #3 - наша структура вызова openssl
Real World Uses For OpenSSLУтилита командной строки [116638]openssl[116639] предоставляет переключатели [116640]-stdin[116641] и [116642]-table[116643], которые мы можем использовать здесь для однократного вызова [116644]openssl[116645] вне зависимости от того, сколько паролей мы хотим к нему передать. Эта единичная модификация снимет все накладные расходы, связанные с вызовом [116646]openssl[116647], выполнит работу, а затем выйдет из него, вместо этого мы оставим один экземпляр открытым на неопределенное время, передав ему столько паролей, сколько захотим.
Ключ [116648]-table[116649] также важен, так как он говорит [116650]openssl[116651] включить оригинальный пароль в версию с шифрами, чтобы мы могли довольно быстро работать над поиском нашего совпадения.
- Вот пример использования всего 3 символов, чтобы показать, что мы меняем:
- Так что теперь мы действительно можем обновить наш оригинальный скрипт [116652]pass.bash[116653] так:
- Теперь, когда мы запускаем его:
- Это массивное улучшение! Этот же самый поиск, который [116654]был[116655] занял более 426 минут, теперь выполнен за ~1 минуту! Если мы пробежимся, чтобы сказать "nnnnn", что примерно посередине [116656]{a..z}^5[116657] пробела в наборе символов. [116658]{a..n}[116659] это 14 символов, и мы берем 5 из них.
- Этот поиск занял ~1.1 минуту. [116660]ПРИМЕЧАНИЕ:[116661] Мы можем перебрать [116662]весь [116663] пробел из 5 символьных паролей также за ~1 минуту.
- Выводы
- Так что с реструктуризацией мы работаем намного быстрее. Этот подход масштабируется гораздо лучше, так как мы добавляем 6-й, 7-й и т.д. символ к общей длине пароля.
Предупреждаем, однако, что мы используем небольшой набор символов, в основном это только строчные символы алфавита. Если смешать все числа, как в обоих случаях, так и специальные символы, то обычно можно получить ~96 символов на позицию. Это может показаться несущественным, но это значительно увеличивает ваш пул:
- Добавление всех этих символов только что увеличило наше поисковое пространство на 2 порядка. Если мы поднимем длину пароля примерно до 10-12 символов, то это действительно сделает метод взлома грубой силы недоступным.
- Использование правильной соли, а также дополнительных NONCE'ов на протяжении всего построения хэшированного пароля может добавить еще больше камней преткновения.
Что еще?
- Вы упомянули использование [116664]Джона (Джона Потрошителя)[116665] или других инструментов для взлома. Вероятно, в настоящее время уровень техники был бы [116666]HashCat[116667].
- Там, где Джон - более узкая версия подхода, который вы пытаетесь использовать, HashCat поднимает его на другой уровень, привлекая использование GPU (до 128), чтобы действительно заставить ваши попытки взлома взлома взлететь.
Вы даже можете использовать [116668]CloudCrack[116669], который является хостируемой версией, и всего за 17 долларов США вы можете заплатить за попытку взлома пароля.
Ссылки
Посмотрите на строки совокупного использования ресурсов вверху [115634] вверху [115635] и вы увидите что-то вроде
Число [115636] нас [115637] является количеством процессора, фактически используемого логикой вашего скрипта (или других вещей, которые он вызывает). [115638]sy[115639] и [115640]wa[115641] - это процессорное время, затрачиваемое на системные вызовы и ожидание ввода/вывода. Если эти цифры высоки, пока работает ваш скрипт, и нет никакой другой активности в системе, то что-то кроме процессора является вашим узким местом.[115251].
Лучше реализовать код не в скрипте оболочки, а в чем-то отличном от скрипта, который может сделать за вас шифрование по собственному усмотрению. Ваша команда openssl неполная, так что мои предложения немного расплывчаты, но обычно perl, python и ruby будут иметь модули, которые реализуют стандартные вещи (такие как [115696]scrypt[115697] и [115698]bcrypt[115699])
Другие способы генерации crypt passwd
Просто не используйте их в самом внутреннем цикле! Реализуйте зацикливание в perl или в любом другом месте, где вы запускаете функцию крипта.
Как упоминал Стефан, вы можете построить список паролей и вставить его в [115700]openssl[115701], а также
Затем проверить вывод на правильность пароля.
Я оставлю реализацию за вами =)[115337].
renice[115625] - это утилита, позволяющая изменять добротность и увеличивать или уменьшать приоритет, но для того, чтобы сделать что-то более агрессивным, нужен корень.
Start [115626]block-paste[115627]:
Терминал
reniceЕсли вы находитесь на терминале, вы можете использовать
Простой пример -
Можно также передать жесткие флаги, но из этого следует, что порядок
Приоритеты работают по шкале от [115630]-20[115631] до [115632]20[115633] - чем меньше число, тем выше его приоритет в системе.
Конец блок-пасты.[115245].
Проблема, которую вы пытаетесь решить, вероятно, была описана как "грубая сила пароля". Для этого вы сгенерировали все возможности в алфавитном порядке и протестировали их, выйдя при первом совпадении. Если вы моделируете пароль как "случайную строку из 5 символов", то это на самом деле оптимально.
A [116696]Несколько[116697] людей будут использовать на самом деле случайный пароль. Несколько, не большинство. Даже для тех вещей, где они действительно должны быть. Особенно для тех вещей, которые они не считают важными. В последнее время это неоднократно подтверждалось многочисленными утечками базы паролей.
Пароль, который вы ищете, может быть [116698]dbKbuW[116699]. Но во много, во много раз более вероятно, что это [116700]qwerty[116701], [116702]abc123[116703], или [116704]123456[116705]. Из утечек в базах данных мы знаем, что тысячи самых распространенных паролей взломают большинство аккаунтов.
Поэтому реальная скорость - генерировать свои догадки в лучшем порядке. Как минимум, отсортируйте свои буквенные списки по частоте на английском языке (а еще лучше - по паролям). Попробуйте [116706]e[116707] намного раньше, чем [116708]z[116709]. Сначала пробегите список из 1000 или около того обычных паролей, еще до того, как начнете свою переборную итерацию по всему поисковому пространству (тратите немного времени, если это не сработает, но в зависимости от ваших пользователей это сработает более чем наполовину).
Если посмотреть, как работают реальные инструменты взлома паролей, то они проходят через несколько списков общих паролей, затем через словарь, затем через вариации (например, "изменить [116710]e[116711] на [116712]3[116713]"), затем через различные стратегии генерации паролей, и только если ни одна из них не работает, то, наконец, начинают итерацию через пространство поиска.[116259]