【问题标题】:What’s the difference between md5(), crc32() and sha1() crypto on PHP? [closed]PHP 上的 md5()、crc32() 和 sha1() 加密有什么区别? [关闭]
【发布时间】:2013-03-18 13:55:40
【问题描述】:

不同之处在于它们生成的长度。

crc32() 给出 32 位代码

sha1() 给出 128 位代码

md5() 给出 160 位代码

对吗??或者他们之间还有什么不同吗?

【问题讨论】:

  • 你应该提到你想用那些散列函数做什么,散列函数有不同的用途。如果您打算存储密码,请记住这些函数都不合适,而是使用 BCrypt 等慢速密钥派生函数。
  • @martinstoeckli 哦,是的,我忘了 bcrypt :D 那有 php 实现吗?
  • @Patashu - 是的,但是使用起来有点棘手,看看这个example

标签: php


【解决方案1】:

它们各自实现不同的加密散列函数,并且每个散列函数生成不同大小的散列。您在此处显示的三个函数之间的主要区别在于 sha1md5 实际上是为了加密安全。 crc32(crc 代表cyclic redundancy check)函数不是加密函数,旨在生成用于检查文件完整性的散列(主要用于确定文件在下载过程中是否损坏)。

附注:请不要将md5sha1 用于任何真正的加密工作(例如散列密码)。这些都被严重破坏(只需询问evernote或使用这种旧算法烧毁的任何其他公司)。而是使用 php crypt() function 并使用 SHA-256 或 SHA-512(优于 256)或河豚。还有always salt your hashes...

【讨论】:

  • 实际上连 SHA-512 都不适合散列密码,你应该使用像 BCryptPBKDF2 这样的慢速密钥派生函数。它们具有可适应未来硬件的成本因素。
【解决方案2】:

我认为不仅length不同,而且他们对encrypt数据使用不同的算法。

PHP 中的加密使用很简单,但这并不意味着它是免费的。首先,根据您要加密的数据,您可能有理由在数据库中存储 32 位值而不是 160 位值以节省空间。其次,加密越安全,传递哈希值的计算时间就越长。如果需要频繁生成 md5(),大容量站点可能会显着减慢速度。

【讨论】:

  • 好的。哪个更安全,md5() bcz 它的长度是 160 位?
  • md5 不是最安全的——sha1 比 md5 更现代,而且 md5 被发现是易碎的,例如找到另一条散列到给定 md5 散列的消息。
  • @Patashu 是的 MD5 可破解,它也已破解...Bcrypt 尚未破解
  • @Dipesh Parmar 是的,bcrypt 和相关哈希是密码的最佳选择。如果您无权访问,则应使用 sha256 后跟 sha1 以及密码上的盐。
  • @Patashu 对,即使 AES 也不错..
【解决方案3】:

crc32 不是散列算法

crc32 生成“作为整数的 str 的 crc32 校验和”。 - 它的预期用途是快速验证某物的完整性,并广泛用于检测意外更改,例如网络传输错误。

md5 和 sha1 是哈希算法

你最好阅读 php's docs 的例子:

为什么 md5() 和 sha1() 等常见的哈希函数不适用于密码? 诸如 MD5、SHA1 和 SHA256 之类的散列算法被设计为非常快速和高效。借助现代技术和计算机设备,“蛮力”这些算法的输出以确定原始输入已变得微不足道。

一个md5is 128-bit,一个sha1is 160-bit。在问题中这是相反的。

md5sha1 之间的一个主要区别是 an example of a sha1 collision 尚未被发现。 IE。如果您将md5 用于两个不同的输入,则有可能获得相同的哈希值; sha1 不是。除此之外,它们实现了不同的算法,但例如,尽管通常都不适合存储密码

【讨论】:

  • CRC 对于检查回火几乎没有用处。其预期目的是检测网络传输错误等意外错误。加密散列函数更适合防止故意回火。
  • @EgonOlieux 我更新了答案,因为它有点模糊。谢谢!
【解决方案4】:

crc32() 不打算用于加密目的。它的目的是它非常快速地产生一个散列,所以当你最关心的时候你想使用它——你想要一个通常有用的散列。出于这个原因,它被用于网络设备。

md5() 和 sha1() 都是加密散列,这意味着它们打算具有非常好的属性,例如很难找到仅给定散列值就产生特定散列的消息。但是,sha1 比 md5 更安全、更现代。事实上,如果您关心安全性,则应考虑弃用 md5。

还记得通过将额外的东西与密码连接来对密码的哈希值进行加盐,或者称为“彩虹表”的东西,它是一个预先散列的常用密码的大列表,可用于找出哈希对应的内容并破解用户帐户。

【讨论】:

    【解决方案5】:

    那些被称为散列函数。

    http://en.wikipedia.org/wiki/Hash_function - 解释不同类型的哈希函数

    它们在内部的工作方式完全不同。

    注意:请勿将crc32 用于加密目的。它用于快速散列,它不如sha1md5 安全。

    【讨论】:

    • 如果安全是一个问题,他们不会“做同样的事情”。 crc32 不做任何加密保证,例如用于散列密码真的很不安全。
    【解决方案6】:

    主要区别在于生成的哈希的长度。

    CRC32 is, evidently, 32 bits, 
    sha1() returns a 128 bit value, 
    and md5() returns a 160 bit value. 
    

    避免碰撞很重要。

    【讨论】:

    • 比这复杂得多...
    • 你混淆了 sha1 和 md5 返回值的长度
    猜你喜欢
    • 2011-09-12
    • 1970-01-01
    • 2010-11-02
    • 2011-07-31
    • 2014-05-02
    • 2011-02-25
    • 1970-01-01
    • 2019-03-02
    • 2014-09-23
    相关资源
    最近更新 更多