【问题标题】:why md5 is slower than sha1 in python 2.7.11为什么 md5 在 python 2.7.11 中比 sha1 慢
【发布时间】:2016-06-14 18:27:20
【问题描述】:

我测试了md5、sha1、crc32的速度,结果显示md5比sha1慢,我很困惑,因为sha1比md5更复杂。

我执行了我的测试 python 脚本来散列一个 png 图像(你可以使用任何你想要的图像)10000 次,例如: crc_vs_md5.py C:\Users\bigwalnut\Desktop\def.png 10000

结果(单位:s): md5:0.122737341241 sha1:0.0984247229759 crc32: 0.0577822398549

代码如下:

from hashlib import md5, sha1
from zlib import crc32
import sys
import time

numberoftime = 0
content = None

def getMd5():
    for x in range(0, numberoftime):
        mdfive = md5()
        mdfive.update(content)
        mdfive.hexdigest()

def getSha1():
    for x in range(0, numberoftime):
        sha1Obj = sha1()
        sha1Obj.update(content)
        sha1Obj.hexdigest()


def getCrc32():
    for x in range(0, numberoftime):
        crc32(content) & 0xffffffff


if len(sys.argv) < 3:
    print('You must enter: filename, numberoftime')
    exit(1)
elif len(sys.argv) > 3:
    print('Only filename, numberoftime is permitted')
    exit(1)

filename = sys.argv[1]
numberoftime = int(sys.argv[2])
print filename, numberoftime

with open(filename, 'rb') as f:
    content = f.read()

start = time.clock()
getMd5()
stop = time.clock()
print "md5: ", stop - start

start = time.clock()
getSha1()
stop = time.clock()
print "sha1: ", stop - start

start = time.clock()
getCrc32()
stop = time.clock()
print "crc32: ", stop - start

【问题讨论】:

  • results on this link 与你的冲突。
  • 了解timeit 以获得更准确结果的好时机。
  • @Selcuk,对不起,我写错了标题,在我的测试中 md5 比 sha1 慢。

标签: python hash


【解决方案1】:

Python 借用 OpenSSL 原语用于大多数加密目的; this post 虽然不是确定的,但暗示 OpenSSL 开发人员知道 MD5 已损坏,可能并没有在优化 MD5 上投入太多精力,而 SHA1 则进行了密集优化; MD5 可能在算法上更简单,但如果代码的优化程度不如 SHA1 代码,那么 MD5 已经很小的优势就不会明显了。

On another post comparing OpenSSL's MD5 and SHA1 implementations (without the Python wrapping),看起来核心 OpenSSL 通常在 SHA1 上更快,尽管它因版本/构建而异(SHA1 在 OSX 10.8 和 10.10 上更快,在 10.9 上更慢)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    相关资源
    最近更新 更多