我不知道为什么我们通过提示用户输入用户名和密码来进行身份验证。在我的心智模型中,提示密码就足够了。
原因如下:
假设有 x 个要使用的有效字符。
案例一(提示用户名和密码)
让用户名和密码的长度分别为n/2字符。由于用户名是公开的,因此破解密码的成功概率是 x^(n/2) 的 1。
用户名是唯一的。
案例 2(仅提示密码)
设密码长度为 n 个字符。成功破解密码的概率是 x^n 的 1。
为什么我们通过提示用户同时输入用户名和密码来进行身份验证?提示密码就够了吗?
密码是唯一的。
我不知道为什么我们通过提示用户输入用户名和密码来进行身份验证。在我的心智模型中,提示密码就足够了。
原因如下:
假设有 x 个要使用的有效字符。
让用户名和密码的长度分别为n/2字符。由于用户名是公开的,因此破解密码的成功概率是 x^(n/2) 的 1。
用户名是唯一的。
设密码长度为 n 个字符。成功破解密码的概率是 x^n 的 1。
为什么我们通过提示用户同时输入用户名和密码来进行身份验证?提示密码就够了吗?
密码是唯一的。
我认为问题在于要求密码是唯一的。如果我输入了我想要的密码,而你告诉我我不能使用它,它已经在使用中,那么我知道我可以使用我想要的密码登录到一个随机的个人帐户。
因此,您需要一个用户名,该用户名是唯一的,并且每个人都可以知道。然后你有一个个人密码,它不一定是唯一的,更难猜。
当您使用它时,对密码进行散列和加盐。
这里已经有了很好的答案,但是仍然缺少简单的基本概念:
识别和认证不是一回事。
简而言之,这是两个独立的要求,不应混淆。
用户名提供身份验证,密码允许您验证声称的身份(即身份验证)。
用户和管理员都受益于用户名,通常是唯一的,不是秘密,他们可以自由地使用它来引用帐户。如果用户名不是唯一的,它可以与电子邮件地址或其他唯一的联系人 ID 相关联。这样,用户可以重置密码并获得新密码,或者在不更改帐户的情况下更改密码。
除此之外,正如其他人所指出的,当它是唯一的标识符并且存在冲突时,只需要一个唯一的密码也是有问题的。
用户名的意义在于识别用户。如果您只要求输入密码,那么多人将(可悲地)拥有密码 123456 或密码。您现在如何识别具有该密码的用户正在尝试登录?这就是为什么还有一个用户名。
而且由于密码不应该以纯文本形式保存,因此您不应该检查密码是否唯一。
您在案例 2 中遗漏的另一点:我只需要找到某人使用的密码,而不是实际使用它的人。所以如果一个人使用密码123456,我只需要知道就可以登录。如果还有一个用户名,单独的密码并不能成功登录。