>и что плохого в готовых хэшерах при условии, если пароль сложный?
Тем, что они "не от мира сего" обычно, т.е. дальше какого-нибудь финта вокруг md5 не идут. Как результат - вполне конечное время подбора пароля. А если этот финт еще и без соления, есть шанс нарваться на готовую радужную таблицу для этого алгоритма. Знаки препинания помогают неплохо, кстати, их гораздо реже используют при подборе/построении радужных.
При этом "старый-старый" unix crypt с md5 алгоритмом использует тысячу итераций хеширования. Потихоньку входимый в обиход SHA (который при этом появился в crypt лет так 5-6 назад) сам по себе более ресурсоемкий и по дефолту делает, вроде 5 тысяч итераций с возможностью в строке хеша модифицировать это значение вплоть то миллиарда итераций.