If you do not store your passwords tens of thousands of times, you do not know what you are doing.
It is computationally expensive; this is the point. For the legitimate purpose of authenticating a user who has the correct password, the load is negligible. But for an attacker who is trying to test a huge list of passwords in an offline attack, the cost is prohibitive.
Using thousands of iterations of a hash function is a well-established and widely used technique for "key reinforcement." It is included in key derivation standards and is used in algorithms such as bcrypt for password protection.
Use bcrypt or PBKDF2, for which you will need to use salt and iteration. Do not try to compose your own method using multiple broken hashes.
source share