不同之处在于它们生成的长度。
crc32() 给出 32 位代码
sha1() 给出 128 位代码
md5() 给出 160 位代码
这样对吗??或者他们之间还有什么区别吗?
它们各自实现不同的加密散列函数,并且每个散列函数生成不同大小的散列。您在此处显示的三个函数之间的主要区别在于sha1和md5实际上是为了加密安全。crc32(crc 代表循环冗余校验)函数不是加密函数,旨在生成用于检查文件完整性的散列(主要用于确定文件在下载过程中是否损坏)。
附带说明:请不要将md5或sha1用于任何真正的加密工作(例如散列密码)。这些都被严重破坏(只需询问evernote或使用这种旧算法烧毁的任何其他公司)。而是使用php crypt() 函数并使用 SHA-256 或 SHA-512(优于 256)或河豚。并且总是给你的哈希加盐......
我认为不仅length
不同,而且他们对数据使用不同的算法encrypt
。
PHP 中的加密使用很简单,但这并不意味着它是免费的。首先,根据您要加密的数据,您可能有理由在数据库中存储 32 位值而不是 160 位值以节省空间。其次,加密越安全,传递哈希值的计算时间就越长。如果需要频繁生成 md5(),大容量站点可能会显着减慢。
crc32生成“作为整数的 str 的 crc32 校验和”。- 它的预期用途是快速验证某物的完整性,并广泛用于检测意外更改,例如网络传输错误。
您最好阅读包含示例的 php 文档:
为什么 md5() 和 sha1() 等常见的散列函数不适用于密码? 诸如 MD5、SHA1 和 SHA256 之类的散列算法被设计为非常快速和高效。借助现代技术和计算机设备,“蛮力”这些算法的输出以确定原始输入已变得微不足道。
Anmd5
是 128 位, asha1
是 160 位。在问题中,这是相反的。
md5
和之间的主要区别在于sha1
尚未找到碰撞示例。sha1
即如果你使用md5
两个不同的输入,就有可能得到相同的哈希值;sha1
不是。除此之外,它们实现了不同的算法,但例如,尽管通常用于存储密码,但它们都不适合存储密码。
crc32() 不打算用于加密目的。它的目的是它非常快速地产生一个散列,所以当你最关心的时候你想使用它——你想要一个通常有用的散列。出于这个原因,它被用于网络设备。
md5() 和 sha1() 都是加密散列,这意味着它们打算具有非常好的属性,例如很难找到仅给定散列值就产生特定散列的消息。但是,sha1 比 md5 更安全、更现代。实际上,如果您关心安全性,则应考虑弃用 md5。
还要记住通过将额外的东西与它们连接来对密码的哈希进行加盐,或者称为“彩虹表”的东西,它是一个预先散列的常用密码的大列表,可用于找出哈希对应的内容并破解用户帐户。
这些被称为哈希函数。
http://en.wikipedia.org/wiki/Hash_function - 解释不同类型的哈希函数
它们在内部的工作方式完全不同。
注意:请勿crc32
用于加密目的。它的用途是快速散列,它不如sha1
or安全md5
。
主要区别在于生成的哈希的长度。
CRC32 is, evidently, 32 bits,
sha1() returns a 128 bit value,
and md5() returns a 160 bit value.
避免碰撞很重要。