为什么要限制密码的长度?
我刚刚注册了一个网站来购买一些商品,当我试图input我的(合理安全的)密码时,我被告知它太长了,我应该input5到10个字符之间的密码! 这是什么意思? 谁做这样的决定? 理想的密码当然是一个非常漫长而复杂的密码? 为什么人们坚持试图限制你可以使用的密码types?
你有没有实现login到网站? 是用于安全目的的login(例如购买商品)。 你对用户的密码有什么限制(如果有的话)? 你做这个决定的原因是什么?
限制密码的大小是为了节省存储空间。 它几乎表明你的密码被清楚地存储在他们的数据库中,所以他们想要限制它的大小。 否则,这只是一个限制,因为执行者不知道更好。 无论哪种方式,这是一个不好的迹象。
您可能需要联系网站的pipe理员并向他们询问。 他们应该存储哈希,而不是密码,不pipe密码有多大,密码总是相同的。 您input的密码的大小,以及您允许input的字符的域名应该没有限制。
最常见的原因是因为前端集成了一些旧的遗留系统,不能处理超过给定数量的字符。
似乎特别愚蠢,因为任何一半体面的网站不会在他们的数据库中存储明文密码,他们存储该密码的单向散列(根据所使用的algorithm,它总是一个设定的长度,例如sha1是一个160位的摘要),然后在login时重新刷新该密码,以确保新哈希密码匹配存储的密码。
除了前端devise美学 – 我同意,执行最大密码长度没有任何意义。 尽pipe有明显的原因,最小长度是完全不同的。
长度限制可能是由于存储空间问题,但这可能是一个非常糟糕的反脚本措施。 如果我的银行告诉我我的密码太短,而不是太长,我会更有信心。 每当我被告知我的密码太短,或者“特殊”字符不被允许时,我想:“哦,他们一定没有在他们的字典中find我的密码… facepalm 。
任何字符都应该被允许。 应鼓励通过短语 ,不要气馁。 他们比隐藏的密码更容易记住,因为他们不会在查找表中更难以破解。
一些(devise不佳的)网站的最大密码长度有一个简单的原因:这是他们在数据库中存储密码的所有空间。 有一个很好的机会,他们没有散列或处理它,这意味着它存储在纯文本。 这样的网站我使用一个使用,每次丢弃密码。 这是一个糟糕的devise,不幸的是人们仍然使用它。
这可能是他们用于encryption的algorithm不适用于大密码,或者他们只有有限的存储空间来存储它。 我知道这两个都是非常糟糕的原因,但是这是可能的。
如果我要制定密码规则,只能是保护用户,比如强迫他们至less使用一个特殊字符和数字,或者混合使用大小写。
不区分大小写的10个字符的字母数字密码有839,299,365,868,340,224种可能的排列方式。 假设它可以检查每秒100万次,这将需要几个冰河时期的蛮力。 这对我来说已经足够安全了。
“最好”的原因可能是你可以记住密码。
这可能是因为他们将密码存储为纯文本,并试图节省空间,但也可能是尝试阻止人们将密码设置为长时间,然后将其忘记,这意味着公司必须发送一封电子邮件你的密码,这有点麻烦。
以这种方式限制密码的唯一可能的原因是简化数据库表,这是一个不好的原因。 应该允许长而复杂的密码!
此外,该网站不应该存储密码,而是存储encryption哈希。 由于哈希是一个固定的大小,这使得数据库非常简单,存储需求很小。