2016-01-31 2 views
-3

Прежде всего, этот вопрос касается этой темы, которую я сделал в последнее время; https://crypto.stackexchange.com/questions/32370/a-way-of-bruteforcing-a-hash-value-without-the-use-of-fileСпособ перебора хэш-значения без использования файла

Пример лучше, чем объяснение.

Допустим, у нас есть этот md5 хэш: 15e0adc0213e01ec44acee74ed4ece5b

Все, что я знаю, этот метод хеширования md5, длина открытого текста имеет 6 и набор символов [A-Za-Z].

Теперь я должен найти чистый текст только с этими сведениями.

То, что я изначально хотел сделать

Я бы просто, используя программное обеспечение «хрустящего» на Linux, создать файл со всеми возможностями.
Тогда я бы написал сценарий, который вычисляет хэш каждой строки и ищет весь файл, пока не найду тот, который я ищу. К сожалению, поскольку [a-zA-Z] {6} создает файл 131 ГБ, этот метод не рекомендуется. Мне нужно найти другой путь.

Альтернативой Я имею в виду

Я думал и искал способ BruteForce этот хэш, точно так же, как я описал выше, но без использования файла. Есть ли сценарий (независимо от языка), похожий на этот «код»;

for(int i=0; i<[a-zA-Z]{6}.size(); i++){ 
    int result = md5_function(i) 
    if(result == '15e0adc0213e01ec44acee74ed4ece5b') { 
     cout << "Result : " << result << endl; 
    } 
    else {} 
} 

Как я могу реализовать этот код?

Теперь, что я хотел знать, как реализовать эту идею?

+0

Я не знаю о других downvotes, но мой был, потому что вы даже не удосужились скопировать -мимо. –

ответ

2

Наивный реализация в C# будет выглядеть примерно так:

IEnumerable<string> GetCombinations(char[] charset, int length) 
{ 
    if(length == 0) 
    { 
     yield return ""; 
     yield break; 
    } 
    foreach(var s in GetCombinations(charset, length-1)) 
    { 
     foreach(var c in charset) 
     { 
      yield return s + c; 
     } 
    } 
} 

Хитрость здесь является то, что iterator не нужна коллекция или файл поддерживает его. Он может лениво создать следующий элемент после вызова MoveNext.

foreach(var s in GetCombinations("abc [...] zABC[...]Z", 6)) 
{ 
    if(hash(s)==targetHash) 
     yay(s); 
} 

Много уродливее и менее гибким, но и гораздо легче понять:

foreach(var c1 in charset) 
{ 
    foreach(var c2 in charset) 
    { 
     ... 
      foreach(var c6 in charset) 
      { 
       var s = c1 + c2 + ... + c6; 
       if(hash(s)==targetHash) 
        yay(s); 
      } 
     ... 
    } 
} 
+0

Спасибо за код! Я буду внимательно изучать: D – Lulzsec

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