首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MD5和Blake2b哈希速度相等,有什么问题吗?

MD5和Blake2b哈希速度相等,有什么问题吗?
EN

Stack Overflow用户
提问于 2022-05-24 18:54:34
回答 1查看 227关注 0票数 2

我编写了一个简单的测试,它做了以下工作:

  • 给出了顶级“根”目录的列表,查找所有文件.

代码语言:javascript
运行
复制
rootDirectories = ["/bin","/etc","/sbin","/lib","/lib32","/lib64"]

def walkDirectory(rootDirectory, ignoreList):
    try:
        directories = dict()
        for dirName, subdirList, fileList in os.walk(rootDirectory):
            if (ignoreList):
                for ignore in ignoreList:
                    if (ignore in fileList):
                        fileList.remove(ignore)
            directories[str(dirName)] = fileList
        return directories
    except Exception as e:
        print("Error while scanning directories and files")

然后

  • 生成MD5或Blake2散列(以块为单位,使用update())

代码语言:javascript
运行
复制
def generateMd5(directory, blockSize): 
    try:
        hash = hashlib.md5()
        with open(directory,"rb") as f:
            for block in iter(lambda: f.read(blockSize),b""):
                hash.update(block)
                # OR - pass (I/O Only)
            return hash.hexdigest()
    except Exception as e:
        print("Error while taking the hash values" + str(e))

def generateBlake2(directory, blockSize):
    try:
        hash = hashlib.blake2b()
        with open(directory,"rb") as f:
            for block in iter(lambda: f.read(blockSize),b""):
                hash.update(block)
                # OR - pass (I/O Only)
            return hash.hexdigest()
    except Exception as e:
        print("Error while taking the hash values"+ str(e))

据说Blake2在英特尔CPU上快了40%。但是,不同块大小的性能似乎是相似的。

这是我的测试结果,所有的平均值都是在50次的测试中得到的:

代码语言:javascript
运行
复制
I/O ONLY - Empty hashing function (pass)
Hash:         Block Size (bytes):         Seconds (avg):           Files Hashed (avg):
MD5              4096                1.0658537864685058             15666.0
MD5              8192                0.7631869792938233             15666.0
MD5              16384                0.679033899307251             15666.0
MD5              32768                0.6130096673965454             15666.0
MD5              65536                0.5926639556884765             15666.0
MD5              131072                0.6072390222549439             15666.0
MD5              262144                0.6025748205184936             15666.0
MD5              524288                0.629586148262024             15666.0
MD5              1048576                0.6911558246612549             15666.0
MD5              2097152                0.7710119438171387             15666.0
MD5              4194304                0.7501423931121827             15666.0
MD5              8388608                0.7613127708435059             15666.0
MD5              16777216                0.8549494647979736             15666.0
MD5              33554432                1.370493221282959             15666.0
MD5              67108864                1.3940581130981444             15666.0
Blake2              4096              0.9557385349273682              15666.0
Blake2              8192              0.775569143295288              15666.0
Blake2              16384              0.6793924331665039              15666.0
Blake2              32768              0.6285490798950195              15666.0
Blake2              65536              0.6092999029159546              15666.0
Blake2              131072              0.6079203844070434              15666.0
Blake2              262144              0.6007542181015014              15666.0
Blake2              524288              0.5933445692062378              15666.0
Blake2              1048576              0.5961050319671631              15666.0
Blake2              2097152              0.6041217613220214              15666.0
Blake2              4194304              0.6066651153564453              15666.0
Blake2              8388608              0.6075587749481202              15666.0
Blake2              16777216              0.6483844709396362              15666.0
Blake2              33554432              1.3640736722946167              15666.0
Blake2              67108864              1.3651361989974975              15666.0


I/O + HASH Generation
Hash:         Block Size (bytes):         Seconds (avg):           Files Hashed (avg):
MD5              4096                3.174709644317627             15666.0
MD5              8192                2.9633057641983034             15666.0
MD5              16384                2.8538199186325075             15666.0
MD5              32768                2.8014142322540283             15666.0
MD5              65536                2.7751221895217895             15666.0
MD5              131072                2.7487613582611083             15666.0
MD5              262144                2.760332064628601             15666.0
MD5              524288                2.7834008264541628             15666.0
MD5              1048576                2.8470048809051516             15666.0
MD5              2097152                2.9602468061447142             15666.0
MD5              4194304                2.8882385206222536             15666.0
MD5              8388608                2.9489006996154785             15666.0
MD5              16777216                2.970426073074341             15666.0
MD5              33554432                3.6108012914657595             15666.0
MD5              67108864                3.5666714572906493             15666.0
Blake2              4096              3.3631218385696413              15666.0
Blake2              8192              3.1597275495529176              15666.0
Blake2              16384              3.0446608781814577              15666.0
Blake2              32768              3.0090284061431887              15666.0
Blake2              65536              2.9616037464141844              15666.0
Blake2              131072              2.9736635446548463              15666.0
Blake2              262144              2.959379949569702              15666.0
Blake2              524288              2.972061824798584              15666.0
Blake2              1048576              2.945613770484924              15666.0
Blake2              2097152              2.956157364845276              15666.0
Blake2              4194304              2.9658774614334105              15666.0
Blake2              8388608              2.970878791809082              15666.0
Blake2              16777216              3.064859108924866              15666.0
Blake2              33554432              3.8108808422088623              15666.0
Blake2              67108864              3.7806590032577514              15666.0

是否限制了我的结果I/O?为什么速度在不同的算法和块大小上会如此相似?

从上面的测试来看,

  • 在大多数情况下都是否定的。将探索多处理适应,因为计算似乎占到了整个运行时的80%。

cat /proc/cpu

代码语言:javascript
运行
复制
vendor_id       : GenuineIntel
model name      : Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz

-I /dev/sda

代码语言:javascript
运行
复制
/dev/sda:

ATA device, with non-removable media
        Model Number:       Micron_5100_MTFDDAK960TBY
EN

Stack Overflow用户

发布于 2022-05-24 19:06:44

你的密码没问题。之所以会出现这种情况,是因为绝大多数时间实际上都没有花在散列上。你所看到的几乎完全是头顶上的:

  1. 从磁盘读取实际数据,如果它是固态驱动器的话,虽然速度相当快,但仍然比在内存中处理数据要慢得多.特别是因为所有对目录和文件的迭代都涉及很多很多查找,即使所有数据在第一次运行后都在操作系统的文件系统缓存中(这似乎不太可能)。

  1. 最可能的主要开销是因为这是一种解释语言,比在更多的系统级语言中执行这一任务要慢几个数量级。不仅对代码/字节码进行解释,而且还有许多对象更新和大量内存分配、重新分配和取消分配,所有这些都发生在幕后,您无法影响其中的大部分。

如果您的运行时间超出了interpreter.代码的时间,那么您将从

  1. 的启动阶段获得额外的大量开销。

如果您在单个大文件上测试这一点,您可能会得到更多相关的结果,这仅仅是因为这消除了相当一部分开销。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72368099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档