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