Некоторые члены моей команды обсуждали сегодня вопросы хранения паролей и общие вопросы безопасности.Как бы то ни было, обсуждение вкратце коснулось того, насколько быстрые атаки методом перебора на GPU сравниваются с традиционными реализациями только для CPU.
Это заинтересовало меня, поэтому я решил поиграться с некоторым кодом.Поскольку я никогда раньше не писал ничего подобного, я решил написать простой (только для процессора) брутфорсер.Моя первоначальная реализация имела дело с паролем фиксированной длины (4 цифры).Для целей тестирования я реализовал это а-ля:
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-символьные возможности, заданные «алфавитом».
Есть ли какой-то общий алгоритм, который позволяет вам выполнитьэтот?Любые примеры приветствуются.