Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么&x2019;PHP上md5()、crc32()和sha1()加密的区别是什么?_Php - Fatal编程技术网

什么&x2019;PHP上md5()、crc32()和sha1()加密的区别是什么?

什么&x2019;PHP上md5()、crc32()和sha1()加密的区别是什么?,php,Php,区别在于它们产生的长度 crc32()给出32位代码 sha1()给出128位代码 md5()给出160位代码 对吗??或者他们之间还有什么不同吗?我认为不仅长度不同,而且他们使用不同的算法对数据进行加密 PHP中的加密使用很简单,但这并不意味着它是免费的。首先,根据加密的数据,您可能有理由在数据库中存储32位值而不是160位值,以节省空间。其次,加密越安全,传递散列值的计算时间就越长。如果需要频繁生成md5(),则高容量站点的速度可能会显著降低 这些被称为散列函数 -解释不同类型的散列函数 他

区别在于它们产生的长度

crc32()给出32位代码

sha1()给出128位代码

md5()给出160位代码


对吗??或者他们之间还有什么不同吗?

我认为不仅
长度不同,而且他们使用不同的算法对数据进行
加密

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


这些被称为散列函数

-解释不同类型的散列函数

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


注意:不要将
crc32
用于加密目的。它用于快速散列,但不如
sha1
md5
安全

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

CRC32 is, evidently, 32 bits, 
sha1() returns a 128 bit value, 
and md5() returns a 160 bit value. 
这在避免碰撞时很重要

crc32()不用于加密目的。它的目的是非常快速地生成一个散列,所以当这是您主要关心的问题时,您需要使用它-您需要一个通常有用的散列。出于这个原因,它被用于网络设备中

md5()和sha1()都是加密散列,这意味着它们想要具有非常好的属性,例如,如果仅给定散列值,则很难找到生成特定散列的消息。然而,sha1比md5更安全、更现代。事实上,如果您关心安全性,那么md5的使用应该被认为是不推荐的


还记得通过连接额外的密码来对密码哈希进行加密,或者使用一个名为“rainbow table”的东西,这是一个大的预哈希通用密码列表,可以用来找出哈希对应的内容并攻击用户帐户。

它们各自实现不同的加密哈希函数,每个散列函数都会生成不同大小的散列。您在这里展示的三个函数之间的主要区别在于,它们实际上是加密安全的。crc32(crc代表)函数不是一个加密函数,它的作用是生成一个散列,用于检查文件的完整性(主要用于确定文件在下载过程中是否损坏)

请注意:请不要将或用于任何真正的加密工作(如散列密码)。这两种算法都非常糟糕(只要问问evernote或其他任何一家因使用这种旧算法而被烧毁的公司就知道了)。而是使用和使用SHA-256或SHA-512(优于256)或河豚。而且

crc32不是散列算法 生成“str的crc32校验和为整数”-其目的是快速验证某些内容的完整性,并广泛用于检测意外更改,如网络传输错误

md5和sha1是散列算法 您最好阅读以下示例:

为什么md5()和sha1()等常用哈希函数不适用于密码? 散列算法(如MD5、SHA1和SHA256)设计得非常快速高效。随着现代技术和计算机设备的发展,为了确定原始输入,对这些算法的输出进行“暴力”已变得微不足道

一个
md5
,一个
sha1
。在这个问题上,情况正好相反


md5
sha1
之间的一个主要区别是尚未找到。也就是说,如果对两个不同的输入使用
md5
,则可能得到相同的散列;用
sha1
它不是。除此之外,它们实现了不同的算法,但是,例如,它们都不适合存储密码,尽管它们通常用于存储密码。

ok。哪个更安全,md5()bcz它的长度是160位?md5不是最安全的-sha1比md5更现代,md5被发现是可破解的,例如,找到另一个散列到给定md5散列的消息。@Patashu是md5可破解的,它也被破解了…Bcrypt还没有broken@Dipesh帕尔玛:是的,bcrypt和相关哈希是密码的最佳选择。如果您没有访问权限,则应使用sha256,后跟sha1以及密码上的salt。@Patashu对,即使AES也很好。如果出于安全考虑,它们也不会“做同样的事情”。crc32不提供加密保证,例如,对密码进行哈希运算确实不安全。您应该提到您想对这些哈希函数做什么,因为哈希函数有不同的用途。如果您打算存储密码,请记住这些函数都不合适,而是使用像BCrypt这样的慢键派生函数。@martinstoeckli哦,是的,我忘记了BCrypt:D,但是它有php实现吗?@Patashu-是的,但是使用它有点棘手,看看这个。它比那个复杂得多…你混淆了sha1和md5返回值的长度。实际上,即使SHA-512不适合散列密码,你也应该使用慢键派生函数,如
BCrypt
PBKDF2
。他们有一个可适应的成本因素,可以增加未来的硬件。CRC是非常无用的检查回火。其目的是检测无意错误,如网络传输错误。加密散列函数更适合于防止故意篡改。@EgonOlieux我更新了答案,因为它有点模糊。谢谢