python md5加密_进行一亿次MD5需要耗时多久?

本文对比了Python、Golang和Rust三种语言进行一亿次MD5加密的耗时。Python耗时约97秒,Go在执行Reset操作后耗时约32秒,而Rust的md-5库耗时约25秒。测试在阿里云2核服务器上进行,不同语言和库的表现展示了性能差异。
摘要由CSDN通过智能技术生成

昨日看到了某公众号的一个小字谜,谜底是某位古代人物的字,然后以UTF-8格式对其进行MD5运算,emm...., 运算一亿次。一开始在网上搜索到了对应的Python代码,然后拿来在阿里云服务器(学生版,2核)上跑了一下,代码如下:

import hashlib
str1 = '曹孟德'
str_md5 = hashlib.md5(str1.encode(encoding='utf-8')).hexdigest()
for _ in range(100000000 - 1):
    str_md5 = hashlib.md5(str_md5.encode(encoding='utf-8')).hexdigest()

print('MD5加密后为 :' + str_md5)

耗时大概97秒左右。

➜  ~ time python3 test.py
MD5加密后为 :358831229ed758f6293990b6d70726e0
python3 test.py  97.10s user 0.02s system 99% cpu 1:37.13 total

接着试图用Go来写,想着会不会快一些,因为官方标准库里自带md5的package(不得不说,Golang的标准库真的是省心),于是一开始写出了下面的代码:

package main

import (
 "crypto/md5"
 "encoding/hex"
 "fmt"
)

func main() {
 name := "曹孟德"
 h := md5.New()
 h.Write([]byte(name))
 middle := hex.EncodeToString(h.Sum(nil))
 for i := 1; i 100000000; i++ {  
  h.Write([]byte(middle))
  middle = hex.EncodeToString(h.Sum(nil))
 }
 fmt.Printf("%s\n", middle)
}

于是发现了一个问题,从第二次MD5的值开始,就开始对不上Python版的MD5值了,后来百思不得姐,经过若干小时的抓瞎尝试,发现在下一次MD5之前,需要执行一次Reset操作,嗯,也就是需要在for循环里加一行代码,下面是正确的版本:

package main

import (
 "crypto/md5"
 "encoding/hex"
 "fmt"
)

func mai
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值