Microsoft’s research team studied this extensively. They looked at what actually happens when you enforce complexity requirements. Users don’t create randomly generated passwords. They follow predictable patterns. Capital letter at the start. Numbers at the end. Exclamation point at the very end. The word “Password” appears in about eight percent of “complex” passwords. When you force rotation, users increment numbers. Summer2024 becomes Fall2024. Or they add exclamation points. Or they change a single character and call it done. The false sense of security is dangerous. IT departments see compliance numbers go up. Everyone is following the password policy. The auditors are happy. Meanwhile, actual security hasn’t improved at all.


Very old operating systems used to have a method for password hashing built in that could only handle 8 characters max. The need for compatibility with it, or things that were too zealous in being compatible lingered for a very long time.
It’s not good, but some services end up behind firewalls that reject inputs that look like SQL injection. Sometimes they decide it’s better to prevent sql-ish passwords than risk some weird fluke.
Sometimes they just say |, I, and l all look too similar and our users are idiots. Which is awful practice.
My personal feeling is that password length should be capped with the length of input the system can handle. Plaintext copy of Alice in wonderland from project guttenberg? Go for it.
Don’t most of those systems turn the user pw into a salted hash? I suppose that would limit the effective pw length, given random pw’s. Like if the hash was 128 bits or w/e, lots of 256 bit pw’s would hash to the same value.
But IDK how big those hashes are. Maybe they’re huge?