我正在开发一个应用程序,我不希望任何人找出管理员用户名/密码的算法。
我想首先澄清一下:
对于我如何在不花钱的情况下获得尽可能安全的建议,您有什么建议?时间是我做的奢侈品。只需PHP和最小的JavaScript。
答案 0 :(得分:5)
您需要的是散列算法(例如md5或sha1),它们是“单向”的,这意味着您可以轻松地散列字符串(如密码),并将生成的散列与存储的散列进行比较。但是,您无法获取哈希值并将其转换回密码。
有关sha1函数,请参阅http://gr.php.net/manual/en/function.sha1.php。
MD5和SHA1是众所周知的算法,SHA1更安全,因为有一些当前的机制可以简化MD5哈希的强制执行。
答案 1 :(得分:4)
密码绝不能加密,这明显违反了CWE-257。必须始终对密码进行哈希处理,SHA256是一个非常好的选择。
SHA256非常强大且非常安全,因为它是公开的,并且经过严格审核。私有算法的使用在secuirty中被称为“(in)security though obscurity”
答案 2 :(得分:3)
我建议您先阅读这篇文章:http://phpsec.org/articles/2005/password-hashing.html
它告诉您如何使用salt生成安全哈希。如果您阅读整篇文章,您应该能够理解如何在最后改进最终功能。
答案 3 :(得分:3)
我建议使用专门设计用作密码哈希的哈希函数,例如bcrypt,而不是像SHA256这样的标准哈希。这使得在哈希泄漏的情况下破解密码变得更加困难。
答案 4 :(得分:2)
您的问题似乎暗示加密密码可通过网络以某种方式访问。
不应该发生这种情况 - 使用.htaccess
或等效文件来限制对该文件的访问,或者只是将其存储在文档根目录之外。这样,潜在的攻击者即使知道加密算法,也无法尝试解密。
也就是说,有大量crytpographic hashing algorithms,即使攻击者确实获取了您的密码文件/文本,它也会将您的密码加密到一个极不可能(但并非不可能)的形式。
上面的维基百科文章中有一个nice list,其中包含各种算法以及当前对每种情况下反转加密密码难度的估计。
大多数现代环境已经支持最强大的这些算法。对于PHP:
http://php.net/manual/en/function.sha1.php
http://php.net/manual/en/function.hash.php
第二个提供了多种选择......
编辑:
请记住,如果您选择的密码为johnycash
,或者使用暴力字典攻击同样容易猜到的话,即使是最好的哈希算法也无济于事。
很多时候,系统中最薄弱的环节在于使用它的人......
答案 5 :(得分:1)
回复:“网站安全性是否仅基于算法的复杂性?”
不,您需要做很多事情来确保网站安全。
你必须防止的一些事情是:
可能还有更多......