A modified version of my submission for CS50's Hacker Problem Set 2. Altered to support multithreading and user defined cracking settings.