【问题标题】:phpmyadmin - difference between md5() and password()phpmyadmin - md5() 和 password() 之间的区别
【发布时间】:2014-06-26 19:58:27
【问题描述】:

我想使用 PHP 和 phpmyadmin 数据库创建一个登录应用程序,并希望密码被加密所以

  1. 除了 md5() 和 password() 之外还有其他类型来加密文本吗?

  2. md5()和password()有什么区别?

  3. md5() 和 password() 之间哪个更好?

谢谢,希望能对其他人有所帮助

*编辑 我更喜欢这种方法的一种哈希方法:)

【问题讨论】:

  • 我知道的不多,但据我所知 md5 是一种单向散列技术。还有其他加密,例如 Rijndael/AES。你可以试试看
  • "PASSWORD() 函数由 MySQL Server 中的身份验证系统使用;您不应在自己的应用程序中使用它。" (和MD5一样,PASSWORD也是一个单向函数,是not "encryption"。)
  • 如果您真的想重新发明轮子并创建您的自己的密码/身份验证系统(不要),然后阅读stackoverflow.com/questions/401656/… 以避免一些最严重的错误——比如使用 MD5 或 SHA!我强烈建议使用现有的经过审查的框架。

标签: mysql encryption phpmyadmin passwords md5


【解决方案1】:

很遗憾,仅使用 SQL 命令无法安全地存储密码。

为了防止彩虹表攻击,您应该在哈希方案中添加一个随机盐,但这意味着您无法单独使用 SQL 验证密码。您必须读取用户表中每一行的盐值并计算哈希值以进行比较。

一个安全的散列函数可以调整为需要一定的时间(例如 10 毫秒),例如 BCrypt 有一个成本因素。如果您必须检查每一行并且每次计算都需要一些时间,那么如果您的用户表增长,您将遇到问题。

这就是为什么密码不应该由数据库本身散列的原因,而是用你的开发语言来做。首先,您必须通过给定的用户名找到哈希及其盐,然后您可以验证这一行的密码。对于 PHP,请查看函数 password_hash()

【讨论】:

    【解决方案2】:

    您可以在the official documentation 中找到所有答案。在提问之前,请始终从这个开始。

    1. 是的,请参阅链接文档中的列表以及详细说明。
    2. md5() 使用 MD5,password() 使用 MySQL 的本机哈希,如文档中所示。
    3. 取决于你需要什么。这个问题太模糊了,但是文档给出了提示:

      PASSWORD() 函数被 MySQL 中的身份验证系统使用 服务器;您不应该在自己的应用程序中使用它。为了那个原因 目的,请考虑使用 MD5() 或 SHA2()。

    【讨论】:

    • 好吧,对不起,这是我的错。谢谢你的解释
    • @user3573370 只是不要忘记在这里接受其中一个答案。使用答案左侧的勾号。
    • 哦好的那怎么看谁给我-1?
    • @user3573370 投票是匿名的。问题上的投票按钮显示为This question does not show any research effort; it is unclear or not useful。因此,如果您的问题被否决,原因就是其中之一(我怀疑您的情况是第一个)。
    • 哦,我觉得对其他人没有用处有点难过。顺便说一句,谢谢你帮助我
    【解决方案3】:

    是的,还有其他类型。

    我建议您使用 BCRYPT。它允许您以一种方式加密密码。您将无法恢复密码,有一个功能可以让您知道给定密码是否与加密密码相同。

    干杯

    【讨论】:

    • mysql 中没有 bcrypt,afaik。我明白你的意思,但你能详细说明一下吗?
    • 所以 -1 是必要的吗? “在 mysql 中没有 bcrypt” --> “我想使用 phpmyadmin 数据库创建一个登录应用程序” 他会使用 PHP 不是吗?
    • 不用担心被否决,没有什么私人的。我们不知道他是否使用 PHP(我猜他是)。不过我们知道他是初学者,所以你的回答更容易引起混淆。
    • 如果你这么说。但我不认为。我只是告诉他他可以使用 BCRYPT 这是一个很好的库来加密密码......
    • 是的,我正在使用 PHP 来创建我的登录应用程序,我很抱歉提出这样的原生问题呵呵。我只是不知道
    【解决方案4】:

    PASSWORD() 函数被 MySQL Server 中的认证系统使用;您不应该在自己的应用程序中使用它。为此,请考虑使用 MD5() 或 SHA2()。另请参阅 RFC 2195 第 2 节(挑战-响应身份验证机制 (CRAM)),了解有关在应用程序中安全处理密码和身份验证的更多信息。

    http://www.sitepoint.com/forums/showthread.php?761789-MYSQL-s-password()-function-or-md5()

    【讨论】:

    • 请至少发布一个链接,指向您复制答案的地方。
    猜你喜欢
    • 1970-01-01
    • 2016-04-22
    • 2019-02-14
    • 2014-09-23
    • 1970-01-01
    • 2021-12-25
    • 2020-05-10
    • 2014-09-20
    • 2010-10-28
    相关资源
    最近更新 更多