If you are trying to defeat brute force attacks, you are better off not using some unsuccessful window / count attempts rather than relying on hashing speed (or hash comparison) to make the attack longer to succeed. Lock the account after a certain number of failed attempts in the crash window and allow new attempts after a considerable time.
This may leave you open to a DOS attack on a well-known (administrative) account, but you can release certain accounts from the lockout policy or have an alternative way - using a secret question / answer - to log in to the locked account before the expiration of the reset period.
[EDIT] To help defeat rainbow attacks - where the attacker extracted your hashed passwords and found matching matches with the same hash - consider using a random salt that is unique to each user, a hashed password, and a fixed salt, which is part of the algorithm, not data. For instance:
testHash = computeHash( user.salt + "98hloj5674" + password ); if (testHash == user.hashedPassword) { valid = true; }
This should invalidate the rainbow tables, because even knowing the user's salt and the hashing algorithm, the values ββin the attacker's rainbow tables will not be displayed on your hashed passwords due to the addition of a fixed salt to the algorithm.
With ASP Classic, you will need to do this in the library, not on the page, to make sure the user does not see your fixed salt.
source share