【发布时间】:2011-03-26 03:28:00
【问题描述】:
使用Digest::SHA 与Digest::SHA1 相比有什么优势吗?反之亦然?两者似乎都得到了维护,但我看不到 Digest::SHA1 存在 Digest::SHA 的理由。
【问题讨论】:
使用Digest::SHA 与Digest::SHA1 相比有什么优势吗?反之亦然?两者似乎都得到了维护,但我看不到 Digest::SHA1 存在 Digest::SHA 的理由。
【问题讨论】:
没有,Digest::SHA1 是旧版,SHA1 也是。根据Digest::SHA1 的文档:
2005 年,在 SHA-1 中发现了安全漏洞,即可能存在数学缺陷,表明需要更强的哈希函数。 Digest::SHA 模块实现了 SHA 系列中更强大的算法。
它明确引用了Digest::SHA。 Digest::SHA 中的实现比 Digest::SHA1 快一点(根据 Digest.pm 的文档——无论如何你应该使用它)。
Algorithm Size Implementation MB/s
SHA-1 160 Digest::SHA v4.3.1 58.9
SHA-1 160 Digest::SHA1 v2.10 48.8
Digest 是Digest 命名空间中所有模块的工厂,它优先于Digest::SHA 而不是Digest::SHA1。您甚至可以争辩说 Digest::SHA1 已被弃用两倍,因为它已被 Digest::SHA2 取代。
我认为在这里证实“已弃用”一词可能很有用。我只是说Digest::SHA1 对仍在 SHA 系列中的非 SHA1 哈希没有用——其他发行版可以处理更多.. Digest::SHA1 也更慢.. 据我所知,它仍然是不久前支持并发布了稳定版本:Digest-SHA1-2.13 - 2010 年 7 月 3 日 - Gisle Aas
【讨论】:
Digest::SHA 而不是Digest::SHA1 的另一个重要原因是前者是一个核心库(从Perl 5.10.0 开始),而后者不是(而且永远不会是)。
使用Digest::SHA1::sha1 编写的东西,或者(出于愚蠢)使用"Digest::$type"->new 而不是Digest->new($type) 的东西可能需要Digest::SHA1。除此之外,Digest::SHA 是首选,Digest->new("SHA-1") 默认使用它。
【讨论】: