in reply to Compact MD5 representation

I had a day off today, and this problem bugged me until I did something about it. So here is a solution:
use Math::Fleximal; print Math::Fleximal->new( "2dd9f2ba1f924996fa231fdceb4c6f57", [0..9, 'a'..'f'] )->change_flex([0..9,'a'..'z','A'..'Z'])->to_str();
which will print "+1owfX3qQrJC5h1IIWhMy23". Strip off the + and you are in business.

You will need Math::Fleximal of course.