区别在于它们生成的长度。
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位。在问题中,这是相反的。
md5
和sha1
之间的一个主要区别是sha1
碰撞的例子尚未被发现。也就是说,如果你对两个不同的输入使用md5
,有可能得到相同的哈希值;sha1
则不然。除此之外,它们实现了不同的算法,但是,例如,都不适合存储密码,尽管它们通常被用来存储密码
crc32()不打算用于加密目的。它的目的是非常非常快地生成一个哈希,所以当这是你的主要关注点时,你想要使用它——你想要一个通常有用的哈希。因此,它被用于网络设备。
md5()和sha1()都是加密散列,这意味着它们打算具有非常好的属性,例如,仅给定散列值就很难找到产生特定散列的消息。但是,sha1比md5更安全、更现代。实际上,如果您关心安全性,应该考虑不使用md5。
还要记住通过附加一些额外的东西来对密码进行哈希处理,或者称为"彩虹表"的东西,这是一个预哈希的大列表,可以用来找出哈希对应的内容并破解用户帐户。
这些被称为哈希函数。
http://en.wikipedia.org/wiki/Hash_function -解释不同类型的哈希函数
它们内部的工作方式完全不同。
注意:不要将crc32
用于加密目的。它的用途是用于快速散列,它不像sha1
或md5
那样安全。
主要区别在于生成的散列长度
CRC32 is, evidently, 32 bits,
sha1() returns a 128 bit value,
and md5() returns a 160 bit value.
在避免碰撞时很重要。