什么';这是在没有数据库的情况下使用PHP加密密码最安全的方法

什么';这是在没有数据库的情况下使用PHP加密密码最安全的方法,php,security,authentication,passwords,cryptography,Php,Security,Authentication,Passwords,Cryptography,我正在开发一个应用程序,我不想让任何人知道管理员用户名/密码的算法 首先,我想澄清: 网站安全仅仅是基于算法的复杂性吗 最安全的方法是什么,或者你可以推荐一个GPL源代码链接?(这难道不可行吗,因为任何人都可以访问这些算法,只要他们能够确定我从哪里获得源代码?) 我的应用程序没有使用MySQL,我不需要 你对我如何在不花钱的情况下尽可能地获得安全感有什么建议。时间是我的奢侈品。只有PHP和最小的JavaScript。您需要的是散列算法(如md5或sha1),它们是“单向的”,这意味着您可以轻松地

我正在开发一个应用程序,我不想让任何人知道管理员用户名/密码的算法

首先,我想澄清:

  • 网站安全仅仅是基于算法的复杂性吗
  • 最安全的方法是什么,或者你可以推荐一个GPL源代码链接?(这难道不可行吗,因为任何人都可以访问这些算法,只要他们能够确定我从哪里获得源代码?)
  • 我的应用程序没有使用MySQL,我不需要

  • 你对我如何在不花钱的情况下尽可能地获得安全感有什么建议。时间是我的奢侈品。只有PHP和最小的JavaScript。

    您需要的是散列算法(如md5或sha1),它们是“单向的”,这意味着您可以轻松地散列字符串(如密码),并将结果散列与存储的散列进行比较。但是,您不能将哈希值转换回密码

    有关sha1函数,请参阅


    MD5和SHA1是众所周知的算法,SHA1更安全,因为目前有一些机制可以简化MD5哈希的暴力执行

    您的问题似乎暗示加密密码可以通过某种方式从网络访问

    这种情况不应该发生-可以使用
    .htaccess
    或等效工具来限制对该文件的访问,也可以将其存储在文档根目录之外。这样,即使知道加密算法,潜在攻击者也不会尝试解密任何内容

    这就是说,有大量的漏洞会将您的密码加密到一种极不可能(但并非不可能)被撤销的形式,即使攻击者确实获取了您的密码文件/文本

    上面的维基百科文章介绍了各种算法,以及目前对每种情况下撤销加密密码的难度的估计

    大多数现代环境已经支持这些最强大的算法。对于PHP:

    第二个提供了一些可供选择的种类

    编辑:

    请记住,如果您选择的密码是
    johnycash
    ,或者使用蛮力字典攻击很容易猜到的密码,那么即使是最好的哈希算法也不会有多大帮助


    通常,系统最薄弱的环节在于使用它的人…

    我建议您从阅读本文开始:

    它告诉您如何使用salt生成安全哈希。如果您阅读了整篇文章,您应该能够理解如何在最后改进最终功能。

    Re:“网站安全性仅仅是基于算法的复杂性吗?”

    不,要使网站安全,你需要做很多事情

    你必须防止的一些事情是:

    • SQL注入
    • 代码注入
    • 目录遍历
    • 跨站点脚本
    • 闪光参数注入
    • 会话劫持
    • 密码强制
    • 跨站点请求伪造
    • 中间人

    可能还有更多…

    密码永远不能加密,这显然违反了法律。密码必须始终进行哈希运算,这是一个非常好的选择


    SHA256是非常强大和安全的,因为它是公开的,并且经过严格审计。在secuirty中避免使用私有算法,因为它被称为“(in)”

    我建议使用专门设计用作密码散列的散列函数,例如,而不是像SHA256这样的标准散列。这使得破解密码变得更加困难,以防散列数据泄露。

    好吧……如果你不使用salt,OP也会遇到这些麻烦:即使你有时间/预算建立数据库,以这种方式将密码存储为散列而不是明文仍然是最佳做法,而使用md5(“随机文本101”“密码”“qwerty”),这使得使用表解密密码更加困难(将结果与已知结果进行比较)。而且,
    md5()的安全性略低于
    sha1()。希望这有帮助@杰克·阿库塔利md5的安全性远不如沙阿1。没有人产生sha1碰撞,sha1仍然是NIST批准的算法。md5是垃圾。嗯,是的,我知道,我似乎记得现在sha1是不安全的,政府切换到sha2。我使用.htaccess,但我确信在我开始使用它之前这还不够,因为有这么多知名度高的Apache网站被黑。很好的链接,非常感谢。wiki的东西helpshtaccess非常安全。几乎在所有情况下,任何Web服务器上的漏洞都是通过应用程序堆栈(即网站本身)而不是底层Web服务器进行的。不要像那篇文章所建议的那样,使用
    md5(uniqid(rand(),true))