首页 文章

计算MD5哈希是否比SHA系列功能更少CPU密集?

提问于
浏览
98

在“标准”笔记本电脑x86硬件上计算MD5散列的CPU密集程度是否比SHA-1或SHA-2少?我对一般信息感兴趣,而不是特定于某个芯片 .

UPDATE: 在我的情况下,我'm interested in calculating the hash of a file. If file-size matters, let' s假设它是300K .

4 回答

  • 10

    真正的答案是: It depends

    有几个因素需要考虑,最明显的是:运行这些算法的cpu以及算法的实现 .

    例如,我和我的朋友都运行完全相同的openssl版本,并且使用不同的Intel Core i7 cpu获得略有不同的结果 .

    我在使用Intel(R)Core(TM)i7-2600 CPU @ 3.40GHz进行测试

    The 'numbers' are in 1000s of bytes per second processed.
    type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
    md5              64257.97k   187370.26k   406435.07k   576544.43k   649827.67k
    sha1             73225.75k   202701.20k   432679.68k   601140.57k   679900.50k
    

    他的英特尔(R)Core(TM)i7 CPU 920 @ 2.67GHz

    The 'numbers' are in 1000s of bytes per second processed.
    type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
    md5              51859.12k   156255.78k   350252.00k   513141.73k   590701.52k
    sha1             56492.56k   156300.76k   328688.76k   452450.92k   508625.68k
    

    我们都在ArchLinux官方软件包中运行与2014年10月15日OpenSSL 1.0.1j完全相同的二进制文件 .

    我对此的看法是,随着sha1的安全性的增加,cpu设计者更有可能提高sha1的速度,并且更多的程序员将致力于算法的优化而不是md5sum .

    我想md5将在某一天不再使用,因为它似乎没有优于sha1的优势 . 我还测试了一些真实文件的情况,结果在两种情况下总是相同的(可能受磁盘I / O限制) .

    大型4.6GB文件的md5sum与同一文件的sha1sum完全相同,与许多小文件(同一目录中的488)相同 . 我运行了十几次测试,他们正在获得相同的结果 .

    进一步调查这将是非常有趣的 . 我想有一些专家可以提供一个可靠的答案,为什么sha1在新处理器上比md5更快 .

  • 41

    在我的2012款MacBook Air(英特尔酷睿i5-3427U,2x 1.8 GHz,2.8 GHz Turbo)上,SHA-1略快于MD5(在64位模式下使用OpenSSL):

    $ openssl speed md5 sha1
    OpenSSL 0.9.8r 8 Feb 2011
    The 'numbers' are in 1000s of bytes per second processed.
    type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
    md5              30055.02k    94158.96k   219602.97k   329008.21k   384150.47k
    sha1             31261.12k    95676.48k   224357.36k   332756.21k   396864.62k
    

    _ 1015个月后,在OS X 10.9中,SHA-1在同一台机器上变慢了:

    $ openssl speed md5 sha1
    OpenSSL 0.9.8y 5 Feb 2013
    The 'numbers' are in 1000s of bytes per second processed.
    type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
    md5              36277.35k   106558.04k   234680.17k   334469.33k   381756.70k
    sha1             35453.52k    99530.85k   206635.24k   281695.48k   313881.86k
    

    Second update: 在OS X 10.10上,SHA-1速度回到10.8级别:

    $ openssl speed md5 sha1
    OpenSSL 0.9.8zc 15 Oct 2014
    The 'numbers' are in 1000s of bytes per second processed.
    type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
    md5              35391.50k   104905.27k   229872.93k   330506.91k   382791.75k
    sha1             38054.09k   110332.44k   238198.72k   340007.12k   387137.77k
    
  • 107

    是的,MD5的CPU密集程度较低 . 在我的Intel x86(Core2 Quad Q6600,2.4 GHz,使用一个内核)上,我在32位模式下得到这个:

    MD5       411
    SHA-1     218
    SHA-256   118
    SHA-512    46
    

    这在64位模式下:

    MD5       407
    SHA-1     312
    SHA-256   148
    SHA-512   189
    

    对于"long"消息,数字以兆字节/秒为单位(这是对于长度超过8 kB的消息所得到的) . 这是sphlib,C(和Java)中的散列函数实现库 . 所有实现都来自同一作者(我),并且在优化方面做出了类似的努力;因此速度差异可以被认为是功能真正固有的 .

    作为比较,请考虑最近的硬盘将以大约100 MB / s的速度运行,而任何通过USB的硬盘都将低于60 MB / s . 尽管SHA-256在这里显得“慢”,但对于大多数用途来说它足够快 .

    注意OpenSSL包含一个32位的SHA-512实现,它比我的代码快得多(但不如64位SHA-512快),因为OpenSSL实现是在汇编中并使用SSE2寄存器,这是不能的在简单的C中完成.SAR-512是这四个中唯一一个受益于SSE2实现的功能 .

    Edit:this page上,可以找到关于许多散列函数速度的报告(单击"Telechargez maintenant"链接) . 该报告采用法语,但大部分都是表格和数字,而且数字是国际性的 . 实现的哈希函数不包括SHA-3候选者(SHABAL除外),但我正在研究它 .

  • 1

    MD5也受益于SSE2的使用,查看BarsWF,然后告诉我它没有 . 所需要的只是一点汇编知识,您可以制作自己的MD5 SSE2例程 . 然而,对于大量吞吐量,在散列期间存在速度的折衷,而不是重新排列输入数据以与所使用的SIMD指令兼容所花费的时间 .

相关问题