不同之处在于它们产生的长度。
crc32()提供32位代码
sha1()给出128位代码
md5()给出160位代码
是不是?或者它们之间是否还有其他差异?
答案 0 :(得分:13)
它们各自实现不同的加密散列函数,并且每个散列函数确实生成不同大小的散列。您在此处显示的三个函数之间的主要区别在于sha1和md5实际上是加密安全的。 crc32(crc代表cyclic redundancy check)函数不是加密函数,而是用于生成将用于检查文件完整性的哈希(主要用于确定在下载过程中它是否已损坏)。
请注意:请不要使用md5或sha1进行任何真正的加密工作(例如散列密码)。这些都非常破碎(只要问evernote或使用这种旧算法烧毁的任何其他公司)。而是使用php crypt() function并使用SHA-256或SHA-512(优于256)或blowfish。并always salt your hashes...
答案 1 :(得分:3)
我认为不仅length
不同,而且他们使用不同的算法来encrypt
数据。
PHP中的加密使用很简单,但这并不意味着它是免费的。首先,根据您正在加密的数据,您可能有理由在数据库中存储32位值而不是160位值以节省空间。其次,加密越安全,传递哈希值的计算时间就越长。如果需要频繁生成md5(),则高容量站点可能会显着减慢。
答案 2 :(得分:1)
crc32()不适用于加密目的。它的目的是非常快速地生成哈希,所以当你主要关注它时你想要使用它 - 你想要一个通常有用的哈希。因此,它被用于网络设备。
md5()和sha1()都是加密散列,这意味着它们打算具有非常好的属性,例如很难找到只产生散列值的特定散列的消息。但是,sha1比md5更安全,更现代。事实上,如果你关心安全性,应该考虑使用md5。
还记得通过连接额外的东西来加密密码,或称为'彩虹表'的东西,这是一个预先散列的常用密码的大列表,可以用来找出哈希对应的内容和黑客用户帐户。
答案 3 :(得分:1)
crc32生成“str的crc32校验和为整数”。 - 它的目的是快速验证某些东西的完整性,并广泛用于检测网络传输错误等意外变化。
您最好阅读涵盖示例的php's docs:
为什么常见的散列函数(如md5()和sha1()不适用于密码? 诸如MD5,SHA1和SHA256之类的散列算法设计得非常快速和高效。利用现代技术和计算机设备,为了确定原始输入,“蛮力”输出这些算法变得微不足道。
md5
is 128-bit,sha1
is 160-bit。在这个问题中,这是相反的。
md5
和sha1
之间的主要区别是an example of a sha1
collision尚未找到。即如果您对两个不同的输入使用md5
,则可以获得相同的哈希值;与sha1
不一样。除此之外,他们实施不同的算法,但是,例如,不适合存储密码尽管通常习惯这样做。
答案 4 :(得分:0)
这些被称为哈希函数。
http://en.wikipedia.org/wiki/Hash_function - 解释不同类型的哈希函数
他们在内部完全不同。
注意:请勿使用crc32
进行加密。它用于快速散列,它不如sha1
或md5
安全。
答案 5 :(得分:-3)
主要区别在于生成的哈希值的长度。
CRC32 is, evidently, 32 bits,
sha1() returns a 128 bit value,
and md5() returns a 160 bit value.
避免碰撞很重要。