Here's the code I used for my solution. Note that since I'm not in any way a Python guru, there may be a more elegant and/or faster solution; I just didn't want to take the time to figure out how to do hashes in C/C++.
Code:
import hashlib
import time
hash = '5bd4c87976f48e6a53919d53e14025e9'
digits = [65, 65, 65, 65, 65, 65]
t0 = time.clock()
while 1:
phrase = ''
for i in range(0, 6):
phrase += chr(digits[i])
if hash == hashlib.md5(phrase).hexdigest():
print phrase
break
for i in range(5, -1, -1):
digits[i] += 1
if digits[i] == 123:
digits[i] = 65
continue
if digits[i] == 91:
digits[i] = 97
break
print time.clock() - t0
This was run on a 2 GHz Core 2 Duo; I ran two instances of the script at the same time so as to use both cores, with one starting at AAAAAA and the other at aAAAAA. I imagine that if you had access to something like
MapReduce it would go a whole lot faster.