Некоторые члены моей команды обсуждали вопросы хранения паролей и общих проблем безопасности сегодня. Во всяком случае, обсуждение вкратце коснулось того, как быстрые атаки с грубой силой с ускорением GPU сравниваются с традиционными реализациями только для CPU.Пермутационное поколение
Это меня заинтересовало, поэтому я решил поиграть с каким-то кодом. Поскольку я никогда не писал ничего подобного раньше, я решил написать простой (только для процессора) грубой-forcer. Моя первоначальная реализация касалась фиксированного (4-значного) пароля. В целях тестирования я внедрил его a la:
for(char a = '0'; a <= '9'; ++a)
{
for(char b = '0'; b <= '9'; ++b)
{
for(char c = '0'; c <= '9'; ++c)
{
for(char d = '0'; d <= '9'; ++d)
{
candidate[0] = a; candidate[1] = b;
candidate[2] = c; candidate[3] = d;
// Test 'candidate'...
}
}
}
}
Это хорошо работает, но очевидно негибко. Я попытался обобщить приведенное выше, чтобы обрабатывать любую длину пароля, но не смог этого сделать. По какой-то причине я не могу понять свою логику, что эти брутто-раны используют для прохождения через 1-значные возможности персонажа с учетом «алфавита».
Есть ли общий алгоритм, который позволяет вам это сделать? Любые примеры приветствуются.
понятие вы ищете называется [рекурсия] (http://en.wikipedia.org/wiki/Recursion) :) –
Дубликат - http://stackoverflow.com/q/3183469/21727 – mbeckish
проблема lem заключается в том, что у вас должен быть n вложенный цикл, но n известен только во время выполнения ... =/ – BlackBear