2014-02-02 3 views
2

Я пытаюсь запрограммировать .zip password cracker (чтобы расшифровать старый .zip-файл, из которого я забыл пароль), и я хочу сделать это быстрее.Отдельный вывод функции во время многопоточности (bash)

Я думаю, что ограничение скорости выполняется с помощью unzip (с помощью unzip -t -P) для проверки пароля. Я думал, что мог бы сделать это быстрее, если бы я дублировал исходный файл и тестировал его с помощью генераторов паролей (теперь я использую только seq для проверки чисел и генерации слов для проверки слов). Моя проблема в том, что я не могу выводить числа и «слова» отдельно.

Я пробовал так:

generate(){ 

seq 0 999999 & generatewords 5 1 a A 

} 

check(){ 

generate | while read password; do 

unzip -tqqq -P $password $file &>/dev/null 

if [ $? = 0 ]; then 

echo -e "Password found:\n\n\"$password\"" && exit 

fi 

done 

} 

Но по логике вещей, я получаю только цифры и слова смешиваются в качестве выходного сигнала. Есть ли способ разделить их и дать им как аргумент следующей функции, чтобы он мог работать с большим количеством файлов? И если один из них получит совпадение, скрипт должен выйти. Можете ли вы сделать это в bash? Другие улучшения приветствуются.

Извините за мой плохой английский и плохое форматирование:/

+0

Добро пожаловать в StackOverflow: если вы отправляете код, XML или образцы данных, ** пожалуйста ** выделите эти строки в текстовом редакторе и нажмите кнопку «образцы кода» ('{}') в редакторе тоже lbar для красивого формата и синтаксиса выделите его! –

+0

Спасибо. Не знал/не понял это в помощи, но я сделаю это как в следующий раз. – oliver

ответ

0

Да, это возможно, вы можете просто использовать $1 и запустить функцию проверки от другой функции

check(){ 
read password 
unzip -tqqq -P $password $file &>/dev/null 
if [ $? = 0 ]; then 
echo "Password is a $1" 
echo -e "Password found:\n\n\"$password\"" && exit 
fi;} 

generate(){ 
while true; do 
seq 0 999999 | check number 
generatewords 5 1 a A | check word 
done;} 

Вы можете использовать $1 в любой путь, который вы хотите, как я это делал, это было просто sugestion

+0

'exit' должен выйти из всего скрипта, так что этот бесконечный цикл должен делать – mjz19910

+0

Использование args немного сложнее, я не мог угадать, как это сделать, поэтому я просто решил использовать канал и читать – mjz19910

Смежные вопросы