6

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

crc32() 给出 32 位代码

sha1() 给出 128 位代码

md5() 给出 160 位代码

这样对吗??或者他们之间还有什么区别吗?

4

6 回答 6

17

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

附带说明:请不要将md5sha1用于任何真正的加密工作(例如散列密码)。这些都被严重破坏(只需询问evernote或使用这种旧算法烧毁的任何其他公司)。而是使用php crypt() 函数并使用 SHA-256 或 SHA-512(优于 256)或河豚。并且总是给你的哈希加盐......

于 2013-03-28T08:09:21.670 回答
4

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

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

于 2013-03-28T07:50:03.453 回答
2

crc32 不是散列算法

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

md5 和 sha1 是哈希算法

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

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

Anmd5 是 128 位, asha1 是 160 位。在问题中,这是相反的。

md5和之间的主要区别在于sha1尚未找到碰撞示例。sha1即如果你使用md5两个不同的输入,就有可能得到相同的哈希值;sha1不是。除此之外,它们实现了不同的算法,但例如,尽管通常用于存储密码,但它们都不适合存储密码。

于 2013-03-28T08:16:14.500 回答
1

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

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

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

于 2013-03-28T08:00:10.813 回答
0

这些被称为哈希函数。

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

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

注意:请勿crc32用于加密目的。它的用途是快速散列,它不如sha1or安全md5

于 2013-03-28T07:51:48.807 回答
-4

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

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

避免碰撞很重要。

于 2013-03-28T07:52:32.613 回答