It's actually not that complicated to do right. But there are a lot of websites that don't do it right.
You see lots of sites banning special characters, requiring an uppercase and lowercase character, and one number, or some variation of that and with more and more specific rules. The problem with these rules is that they make passwords hard for people to remember without really increasing security, punish users using secure passwords that don't happen to quite match the requirements, and lead to people trying to figure out ways to get around them that lead to less security.
Not to mention, by forcing passwords into such specific rules, you're giving a potential hacker more information about how to make guesses, because every password is going to match these rules. The more specific they are, the less has to be checked. For example, if every password must have a number, well then you don't need to check any words by themselves, just words with numbers added on or mixed in. If special characters aren't allowed, that's millions of combinations that don't need to be checked anymore.
So how do we make more secure passwords?
Three simple rules:
- Must not contain more than 6 occurrences of the same character.
- Must be at least 10 characters long.
- Must not be equal to your username, your email address, the site's name, the site's URL.
And with that, you have stopped the majority of bad passwords. There's only one thing left to do... This list will not always be true, in the future, longer passwords will probably be needed. The whole reason I'm even saying 10 characters is because 8 character passwords are essentially equal to not having a password at all these days. I personally use 32 characters or more, because that will last a while, 10 characters is a lot closer to becoming easily hackable.