title: MD5 brute-force attack - efficient multithreaded implementation
body: <p>I want to implement a multithreaded MD5 brute-force attack algorithm (in C++). I know about Rainbow tables and dictionaries, but I'm not going to implement the most efficient MD5 cracker, just interested in brute-force algorithm</p>
  
  <p>The problem is how to distribute all password variations of all available lengths between threads. For example, to restore a password containing only lower-case characters from 4 to 6 symbols we should look over N=26^4+26^5+26^6=321254128 combinations (according to variation with repetitions formula, Vnk = n^k)</p>
  
  <p>So that distribute all permutations in equial parts between, for example 8 threads, we should know every (N/8)*t variation, where t=(1..7). And take notice, these variationa have different length (4,5,6), and variations of 4-5 symbols could be pushed to the same thread with some number of 6-symbols variations</p>
  
  <p>Does anybody know, how that algorithm is implemented in "real-world" brute-force applications? Maybe some kind of thread-pool?</p>