PHP上md5(), crc32()和sha1()加密的区别是什么?


What’s the difference between md5(), crc32() and sha1() crypto on PHP?

区别在于它们生成的长度。

crc32()给出32位码

sha1()给出128位码

md5()给出160位码

是正确的吗?或者他们之间还有什么不同吗?

它们各自实现不同的加密哈希函数,并且每个哈希函数确实生成不同大小的哈希。您在这里展示的三个函数之间的主要区别在于sha1和md5实际上是加密安全的。Crc32 (crc代表循环冗余检查)函数不是加密函数,旨在生成一个哈希,用于检查文件的完整性(主要是确定它是否在下载期间损坏)。

只是一个旁注:请不要使用md5或sha1进行任何真正的加密工作(如散列密码)。这两种算法都很糟糕(问问evernote或其他因使用这种旧算法而遭受损失的公司就知道了)。相反,使用php crypt()函数并使用SHA-256或SHA-512(优于256)或blowfish。

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

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

crc32不是哈希算法

crc32将STR的crc32校验和生成为整数。-它的预期用途是快速验证某些东西的完整性,并广泛用于检测意外变化,如网络传输错误。

md5和sha1是哈希算法

你最好阅读包含示例的php文档:

为什么常见的散列函数如md5()和sha1()不适合密码?哈希算法,如MD5, SHA1和SHA256被设计得非常快速和有效。有了现代技术和计算机设备,"蛮力"已经变得微不足道了。这些算法的输出,才能确定原来的输入。

md5为128位,sha1为160位。在问题中,这是相反的。

md5sha1之间的一个主要区别是sha1碰撞的例子尚未被发现。也就是说,如果你对两个不同的输入使用md5,有可能得到相同的哈希值;sha1则不然。除此之外,它们实现了不同的算法,但是,例如,都不适合存储密码,尽管它们通常被用来存储密码

crc32()不打算用于加密目的。它的目的是非常非常快地生成一个哈希,所以当这是你的主要关注点时,你想要使用它——你想要一个通常有用的哈希。因此,它被用于网络设备。

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

还要记住通过附加一些额外的东西来对密码进行哈希处理,或者称为"彩虹表"的东西,这是一个预哈希的大列表,可以用来找出哈希对应的内容并破解用户帐户。

这些被称为哈希函数。

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

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

注意:不要将crc32用于加密目的。它的用途是用于快速散列,它不像sha1md5那样安全。

主要区别在于生成的散列长度

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

在避免碰撞时很重要。