不同程序语言处理加密算法的性能对比(PHP/Golang/NodeJS)
2024-09-06 11:10:55
首先上我最常用且最易用的PHP来做下测试
<?php function test_encrypt($fun, $max) {
$begin = microtime(TRUE);
$pwdpre = time();
for ($i = 1; $i <= $max; $i++) {
$fun($pwdpre . $i);
}
echo $fun . ' => ' . number_format((microtime(TRUE) - $begin) * 1000, 2) . ' ms' . "\r\n";
} test_encrypt('crc32', 1000 * 1000); //165.52ms
test_encrypt('md5', 1000 * 1000); //390.99ms
test_encrypt('sha1', 1000 * 1000); //488.63.ms
下面贴上很多人觉得性能不错的Golang来做下测试
package main import (
"crypto/md5"
"crypto/sha1"
"encoding/hex"
"fmt"
"hash/crc32"
"strconv"
"time"
) func main() {
test_encrypt("CRC32", 1000*1000) // 162.1024 ms
test_encrypt("MD5", 1000*1000) // 525.0696 ms
test_encrypt("SHA1", 1000*1000) // 586.758 ms
} func test_encrypt(fun string, max int) {
pwdpre := strconv.FormatInt(time.Now().Unix(), 10)
begin := time.Now().UnixNano()
for i := 1; i <= max; i++ {
switch fun {
case "CRC32":
CRC32(pwdpre + strconv.Itoa(i))
case "MD5":
MD5(pwdpre + strconv.Itoa(i))
case "SHA1":
SHA1(pwdpre + strconv.Itoa(i))
} }
end := time.Now().UnixNano()
fmt.Println(fun, "=>", float64(end-begin)/1e6, "ms")
}
func MD5(str string) string {
// 取得16进制文本MD5
h := md5.New()
h.Write([]byte(str))
return hex.EncodeToString(h.Sum(nil))
} func SHA1(str string) string {
// 取得16进制文本SHA1
c := sha1.New()
c.Write([]byte(str))
return hex.EncodeToString(c.Sum(nil))
} func CRC32(str string) uint32 {
// 取得无符号32位整型CRC32
return crc32.ChecksumIEEE([]byte(str))
}
最新文章
- MySQL运行状态show status详解
- Spring+SpringMVC+MyBatis+LogBack+C3P0+Maven+Git小结(转)
- HTML5优秀图表控件
- [测试] Firemonkey Android 照相自订分辨率测试
- get_free_page
- springfox.documentation.service.ApiInfo配置示例
- JSon_零基础_005_将po(bean)对象集合List转换为JSon格式的对象字符串,返回给界面
- span标签之间的空隙
- Android实例-拍摄和分享照片、分享文本(XE8+小米2)
- Extjs6(五)——写一个包含toolbar、form、grid的子页面
- MySQL .msi 安装失败改用.zip安装步骤
- ES2018新特性(译文)
- js模块化规范—commonjs
- UUID类型如何比较是否相等
- 距离LCA离线算法Tarjan + dfs + 并查集
- KVM源代码解读:linux-3.17.4\arch\x86\include\asm\kvm_host.h
- Crawl(2)
- (转) Linux 内核运行参数修改——sysctl命令
- 正经学C#_变量与其数据类型:《c#入门经典》
- 用express框架实现反向代理
热门文章
- java抽象类,多态1
- 交换机Access、Trunk和Hybrid 接口类型及区别
- 生成微博授权URL及回调地址
- getElementBy系列和querySelector系列的区别
- 浅尝 Elastic Stack (二) Logstash
- kafka 消费组功能验证以及消费者数据重复数据丢失问题说明 3
- 第15.24节 PyQt(Python+Qt)入门学习:Model/View架构中QTableView的作用及属性详解
- 上传到github
- Llbp2p是什么?
- WPF中DatePiker值绑定以及精简查询