【问题标题】:PHP MD5 Performance = is it processor hungry?PHP MD5 性能 = 是否需要处理器?
【发布时间】:2014-02-10 02:34:23
【问题描述】:

md5() 通常用于密码,短字符串

但是这一次我想加密(不需要解密)一个大字符串,就像整篇文章......(更不用说我需要每隔几秒做一次)

这会是个问题吗?或者它是否需要处理器更多的工作/更长的时间来 md5 一个大字符串与一个短密码?

我看了md5真的很快..

对于那些好奇的人,我正在尝试生成相关字符串的“签名”

【问题讨论】:

  • 不,md5 不是 CPU 密集型的。这就是为什么现在它是密码哈希的无用选择。它被设计为快速/轻量级。但是是的,md5 的运算时间与输入的大小成正比。

标签: php md5


【解决方案1】:

亲爱的。

  1. 嗯,MD5 不是 encryption
    (根据定义,加密是可逆的。)

  2. 不要将 MD5 或 SHA 用于密码哈希 - 它们快了!
    (而且 MD5 对于这样的任务来说是完全损坏的。)

哈希算法(包括 MD5)所花费的时间与输入的大小成正比,即 O(n)。这意味着,散列 100MB 所需的时间大约是散列 50MB 所需的“两倍”。对于内存中的 PHP 字符串,这将是“眨眼之间”(因为 I/O 很可能是瓶颈) - 您需要在真实数据上运行性能基准测试一个真实的环境来量化它。

MD5 确实“非常非常快”;该算法相对简单,并且与许多哈希算法一样,设计速度很快。在出现真正性能问题之前不要担心性能 - 现代 CPU 非常 快。此外,虽然 MD5(和 SHA)速度很快,但在无限循环中连续运行 MD5 当然会“吃掉”所有 CPU;如果有工作要做,空闲的 CPU 就是浪费的 CPU。

但是,请考虑将 SHA (preferable SHA-2) 用于“通用”签名散列 - 它只是稍微慢一点(通过一个常数因子),但它是一种更好的算法,即使在修剪到相同的输出空间时也是如此,并且可能会防止出现问题未来。

【讨论】:

  • 感谢您的意见.. 只是为了有趣的辩论,我相信 mD5 也是标准定义的加密.. 它通常也被称为单向加密。 :P ... 更严肃地说,你能详细说明你的第 2 点吗?我不太明白你在这个问题上的意思。 ...好吧,所以我现在使用 Md5.. 无论如何它只是几 kb 的数据(在极少数情况下最多 200kb)。
  • @BrownChiLD 不。这不是一场辩论,甚至不是一场有趣的辩论。 "encryption is the process of encoding messages (or information) in such a way that only authorized parties can read [the original message]"。但是,哈希(所有输入)既不是injective function,也不是可逆函数,因此不是加密。
  • @BrownChiLD 至于第 2 点,explain why MD5/SHA are terrible choices for password hashes大量 资源:“即使是 SHA2256(salt ∥ password) 的“好”散列方案 仍然完全容易受到这些廉价而有效的攻击,因此像 bcrypt 这样的自适应哈希算法的重要性。” (请注意,这篇文章已有 4 年历史了 - 从那时起,计算机/GPU 才变得快得多。)
  • @BrownChiLD tl;dr:我建议将 SHA 用于一般(非密码)签名散列需求。
  • 重新辩论,哈哈,好吧.. 很好,你赢了 :) .. 关于其余的建议,非常感谢.. 它很有见地.. 虽然有真相 t md5/sha not具有密码哈希值那么好,这一切都取决于您要达到的安全级别..就我个人而言,我从来没有找到加强密码哈希值的理由,因为让我们面对现实吧,它可能不是防弹的但这已经足够了。总会有更安全的东西......我相信实施是关键。
猜你喜欢
  • 2021-06-26
  • 2022-01-09
  • 1970-01-01
  • 2011-08-01
  • 2010-11-07
  • 2023-04-08
  • 2011-01-27
  • 1970-01-01
  • 2011-11-12
相关资源
最近更新 更多