随机字符串是好的验证码吗
我正在生成用于激活帐户的验证码。您以前可能见过这种事情。
我的问题:如果我要使用这样的复杂公式生成此代码:
md5(md5(time().'helloguys'.rand(0,9999)));
它真的比生成像 gj3dI3OGwo5Enf...
这样的 32 个字符和数字的随机字符串更好吗?
I'm generating a verification code to be used for account activation. You've probably seen this sort of thing before.
My question: if I were to generate this code with a complex formula like this:
md5(md5(time().'helloguys'.rand(0,9999)));
Is it really any better than generating just a random string of 32 characters and numbers like gj3dI3OGwo5Enf...
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不,使用哈希并不是更好。选择 32 个随机字符会更安全(更难以预测)。 (数字是字符。)使用好的(“加密的”)随机数生成器,以及好的种子(来自 /dev/random 的一些字节)。不要把时间当作种子。
No, using the hash is not better. It would be more secure (less predictable) to pick 32 random characters. (Digits are characters.) Use a good ("cryptographic") random number generator, with a good seed (some bytes from /dev/random). Don't use time as a seed.
同意埃里克森的观点,只是建议您
在 *nix 上使用命令,这将比您可能发明的任何程序更好地完成工作。
如果您想以编程方式生成一些字符串,您可以看看
这提供了非常好的随机性和碰撞之前的水平。
如果您需要更高级别的安全性,您可以考虑在 http://www.random.org/< 上生成随机序列/a>
Agree with erickson, just may advise you to use
command on *nix which will the job muich better of any procedure you may invent.
If you want to generate some string programmatically you may take a look at
this gives very good level of randomness and prior to collisions.
If you need even higher level of security you may consider to generate random sequences on http://www.random.org/