为什么要限制密码的长度?

54

我刚刚注册了一个购买商品的网站,当我试图输入我的(相对安全的)密码时,系统告诉我密码太长了,应该输入5到10个字符的密码!这是什么意思?谁会做出这样的决定?理想的密码肯定是非常长且复杂的吧?为什么人们坚持要限制你可以使用的密码类型?

您是否需要在网站上实现登录功能?该登录是否用于安全目的(例如购买商品)?您对用户密码设置了什么(如果有)限制?您做出该决定的原因是什么?


1
好吧,不想抱怨,但我认为用户名的使用也是如此。有时您的用户名只能是4到8个字符。谁会考虑到这种事情呢?为什么不让用户输入他们的电子邮件地址或其他喜欢的内容呢? - Wim Haanstra
2
长/复杂的密码可以防止暴力破解攻击,但无法防御恶意软件、键盘记录器、钓鱼、中间人和社交工程攻击等。即使是最好的密码策略也难以抵御这些攻击。 - Alan
1
为了那些偶然发现这个问题的用户,有一个类似的问题已经被提出并得到了一系列合法的回答,可以在这里找到:http://stackoverflow.com/questions/988504/is-there-any-reason-for-placing-upper-limits-on-passwords - Welbog
4
我使用KeePass生成并自动填充我所有的密码(20个字符的字母数字加符号)。我的银行是唯一一个限制密码长度和字符的地方。相当可悲,不是吗? - Travis
@Travis 在我反复向与我的银行相关的所有可见电子邮件发送脚本化的客户服务投诉之前,密码被限制在<= 8个字符以内。经过一个月的烦恼/教育后,他们开始改进了。 - recursion.ninja
8个回答

106

限制密码的大小是为了节省存储空间。这几乎表明您的密码以明文形式存储在其数据库中,因此他们希望限制其大小。否则,这只是因为实现者不知道更好的方法所做的限制。无论哪种情况,这都是一个不好的迹象。

您可能希望联系网站管理员并询问他们。他们应该存储哈希而不是密码,哈希的大小始终相同,无论密码有多大。你输入密码的大小和允许输入的字符范围确实不应该有任何限制。


12
这是古老软件的一个很好的标志。当你的银行要求密码长度小于等于6位,且大小写不敏感时,这是一个非常糟糕的迹象。 - rmmh
8
“应该没有密码长度的限制”这句话可能需要更正为“应该没有密码长度的上限”。 - RobH
9
地球上,16个字符怎么可能算是合理的?我的通行密语通常比那长得多。一个“合理”的限制应该在1024到65536之间。 - Welbog
3
你的意思是说,因为大多数用户对安全一无所知,所以减弱我的密码安全性是可以接受的? - Welbog
3
如果他们关心安全,就不应该保存任何人的密码,而是制作一个加盐哈希值。这些哈希通常是固定长度的,因此密码的长度并不重要。 - dbkk
显示剩余9条评论

30

最常见的原因是因为前端与某些旧的遗留系统集成,这些系统不能处理超过一定数量的字符。


6
好的,最常见的“有效”理由是......我猜现实中最常见的理由是简单的愚蠢。 - bobince
他们不是好好地做前端,也没有解决如何与后端透明地集成的问题,而是直接将问题拖到新系统中?! - JeeBee
1
@JeeBee 企业中的遗留系统泥潭足以让成年人哭泣,甚至是整个团队。我并不主张这种解决方案,但如果这是唯一的方法来保持一定程度的一致性呢? - krosenvold
有一些旧的遗留系统将密码以明文形式存储? - Mechanical snail

4
长度限制 可能 是由于存储空间问题,但它也 可能 是一项非常糟糕的防脚本措施。 如果我的银行告诉我密码太短而不是太长,我会更加有信心。每当我被告知密码太短,或者不允许使用“特殊”字符时,我就会想,“哦,他们一定没有在他们的字典中找到我的密码...摊手。”
任何字符都应该被允许。 应该鼓励使用密码短语,而不是反对它。 它们比晦涩难懂的密码更容易记忆,并且更难以破解,因为它们不会出现在查找表中。

+1 for phrases. 我喜欢使用短语密码,因为它们易记,自然包含非字母数字字符。只要确保它们不是过于明显的。 - Welbog
1
@Welbog:我以前公司的系统管理员是一个著名的“星际迷航”(他有一张Starfleet Academy的汽车贴纸),他用的密码是“斯波克”。某种程度上,我的直觉告诉我,“长命百岁和繁荣昌盛”只会更加安全 :) - Bill the Lizard
我认识的一位系统管理员,将他的粉丝化名用作密码,并在桌子旁边的海报上写下了这个密码。而他为一家国际执法机构工作。啊,美好的日子</jcdenton>;-) - Steve Jessop

3
一些(设计不良的)网站之所以有最大密码长度,是因为它们在数据库中存储密码的空间有限。很可能它们根本没有进行哈希处理,意味着密码以明文形式存储。对于这样的网站,我会使用一次性、可丢弃的密码。这是一种设计不良,很遗憾仍然有人在使用它。

3
似乎特别愚蠢,因为任何一款半好的网站都不会在其数据库中存储明文密码,他们会存储该密码的单向哈希值(这将始终是一个固定长度,具体取决于所使用的算法,例如sha1是160位摘要),然后在登录时重新对该密码进行哈希处理,以确保新哈希处理后的密码与存储的密码匹配。
除了前端设计美学之外,我同意,强制实施最大密码长度没有任何意义。然而,由于明显的原因,最小长度则完全不同。

2

可能是他们用于加密的算法对于较长的密码不起作用,或者他们只有有限的存储空间来存储它。这两个都是非常糟糕的理由,我知道,但这是可能的。

如果我要制定密码规则,那么只会是为了保护用户,例如强制使用至少一个特殊字符和数字,或混合大小写字母。


1
可能是因为他们将您的密码以明文形式存储并尝试节省空间,但也可能是为了防止人们设置过长的密码然后忘记它们,这意味着公司必须发送一封带有您的密码的电子邮件,这有点麻烦。

0

限制密码长度的唯一可能原因是为了简化数据库表结构,这是一个不好的原因。应该允许使用长且复杂的密码!

此外,网站根本不应该存储密码,而应该存储加密哈希值。由于哈希值大小固定,这使得数据库非常简单,存储要求也很小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接