我正在寻求开发一个系统,在该系统中我需要为每个用户分配一个唯一的密码以确保安全。用户输入此密码仅作为识别自己身份的一种方式。因此我不希望用户能够猜测其他用户的密码。假设我的最大用户数是 100000,这个 PIN 码应该有多长?
例如1234 4532 3423
我应该通过某种算法生成此代码吗?或者我应该随机生成它?
基本上我不希望人们能够猜测其他人的密码,它应该支持足够数量的用户。
如果我的问题听起来有点令人困惑,我很抱歉,但很乐意澄清任何疑问。
非常感谢。
更新
阅读完下面的所有帖子后,我想添加一些更多细节。
- 我想要实现的目标与刮刮卡非常相似。
- 用户会获得一张卡,他/她必须刮开该卡才能找到 PIN 码。
- 现在,用户必须能够使用此 PIN 码访问我的系统。
我无法添加额外的安全性(例如用户名和密码),因为这样会阻止用户使用刮刮卡。我希望在限制范围内尽可能难以猜测 pin 码。
再次感谢大家的精彩回复。
最佳答案
如果将其附加到唯一的已知用户ID(仍然可以是数字),4个随机数字应该足够了[按照starblue的建议]
伪随机数生成器也应该没问题。您可以使用可逆加密 (AES) 或单向哈希将它们存储在数据库中
您主要担心的是,一个人在被锁定之前可能会错误输入 PIN 码多少次。这应该很低,比如大约三...这将阻止人们猜测其他人的数字。
任何超过 6 位数字,人们就会忘记它们,或者更糟糕的是,将它们写在显示器上的便利贴上。
假设帐户因 3 次错误尝试而被锁定,则使用 4 位 PIN 码加上用户 ID 组件 UserId (999999) + Pin (1234),您就有 3/10000 的机会被别人猜到。这是可以接受的吗?如果不是,则将引脚长度设为 5 并得到 3/100000
关于security - 引脚生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/404806/