sha1 sha256 md5 crc32几种摘要签名算法的效率,及实现对比及分析
sha1/sha256/md5/crc32这几种算法都是目前比较常用的摘要算法,在我们实际开发中,经常会需要使用,我们该如何选择呢,哪个算法的速度更快呢?
我们选择了一个差不多1G大小的system.img来分别计算下这四种不同的摘要信息,我们写了一个脚本来计算,更方便我们查看对比结果:
date -u +%r
sha256sum system.img
date -u +%r
sha1sum system.img
date -u +%r
md5sum system.img
date -u +%r
cksum system.img
date -u +%r
我们执行下这个脚本,打印如下:
我们计算下时间:
sha256: 5s 64字符
sha1: 3s 40字节
md5: 2s 32字节
crc32: 3s 10字节
从时间上来看: md5 < sha1 = crc32 < sha256
从摘要长度看: crc32 < md5 < sha1 < sha256
这个我们是直接使用现有的工具计算速度,我们代码中如何计算呢,我们以sha1为例,使用C代码计算下system.img摘要信息
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/sha.h>#define BUFFER_SIZE (10*1024*1024)static const char hex_chars[] = "0123456789abcdef";void convert_hex(unsigned char *md, unsigned char *mdstr) {int i;int j = 0;unsigned int c;for (i = 0; i < 20; i++) {c = (md[i] >> 4) & 0x0f;mdstr[j++] = hex_chars[c];mdstr[j++] = hex_chars[md[i] & 0x0f];}mdstr[40] = '\0';
}int main(int argc, char **argv) {int read = 0;SHA_CTX shactx;char md[SHA_DIGEST_LENGTH];char mdstr[40];SHA1_Init(&shactx);FILE *p=fopen(argv[1], "r");if (p==NULL) {printf("open %s failed!\n", argv[1]);return -1;}unsigned char *buf = (unsigned char *)malloc(BUFFER_SIZE);if (buf == NULL) {printf("malloc %d failed!\n", BUFFER_SIZE);fclose(p);return -1;}while(!feof(p)) {read = fread(buf, 1, BUFFER_SIZE, p);SHA1_Update(&shactx, buf, read);}free(buf);buf = NULL;fclose(p);SHA1_Final(md, &shactx);convert_hex(md, mdstr);printf ("Result of SHA1 : %s\n", mdstr);return 0;}
我们直接编译gcc main.c -lcrypto 生成a.out可执行文件:
date -u +%r
./a.out system.img
date -u +%r
执行结果如下:
11:50:22 AM
Result of SHA1 : 2f5c5a4664026c6a9a1f330f6510d7d9efc2910f
11:50:24 AM
差不多2s,就可以计算出sha1值,好像比我们之前使用工具计算的3s还有快一些,我们每次读的缓存是10M,是不是跟这个有关系呢,我们对比下不同的缓存大小的情况:我们把BUFFER_SIZE大小修改为1M与100M再次计算:
1M时:(耗时2s)
11:53:04 AM
Result of SHA1 : 2f5c5a4664026c6a9a1f330f6510d7d9efc2910f
11:53:06 AM
100M时:(耗时2s)
11:53:39 AM
Result of SHA1 : 2f5c5a4664026c6a9a1f330f6510d7d9efc2910f
11:53:41 AM
综上对比,计算sha1值时,跟每次计算的缓存大小关系不大,主要的耗时还是在数据计算过程。
sha1 sha256 md5 crc32几种摘要签名算法的效率,及实现对比及分析相关推荐
- vue.js中DES、RSA、SHA1、MD5这四种加密算法的使用
vue.js中DES.RSA.SHA1.MD5这四种加密算法的使用 DES RSA SHA1 MD5 DES 美国 数据加密标准(DES)是对称密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也 ...
- 【原创】浅析密码学在互联网支付中的应用|RSA,Hash,AES,DES,3DES,SHA1,SHA256,MD5,SSL,Private Key,Public Key...
一)概述 什么是互联网支付? 当支付遇到互联网,一场革命自然不可避免.成为现实的是传统的现金支付已经"退居二线",各种在线支付方式成为人们日常消费的主要支付方式.银行推出的网银以及 ...
- **超防 ja3+加速乐(三种加密(md5,sha1,sha256)) 实战(python爬虫js逆向)
**超防 加速乐+ja3 实战(python爬虫js逆向) 地址 aHR0cHM6Ly93d3cuaGVmZWkuZ292LmNuL2NvbnRlbnQvY29sdW1uLzY3OTQ4MTE/cGF ...
- MD5 SHA1 SHA256 SHA512 SHA1WithRSA RSA 的区别
转自:http://www.cnblogs.com/cxygg/p/9468653.html https://blog.csdn.net/hengshujiyi/article/details/459 ...
- 摘要/哈希/散列算法MD5 SHA1 SHA256 SHA512的区别和MAC算法
目录 一.摘要算法大致都要经过以下步骤 1. 明文数据预处理 1.1 填充比特 1.2 附加消息长度 2. 摘要计算 2.1 常量初始化 2.2 分组及分组拓展和分组分段 2.3 轮函数(每段一轮,此 ...
- Python计算校验文件的MD5、SHA1、SHA256和CRC32,获取文件创建日期、修改日期和文件大小
main.py # -*- coding: utf-8 -*- import os from hashlib import md5, sha1, sha256 from zlib import crc ...
- Python计算校验文件的MD5、SHA1、SHA256和CRC32
# -*- coding: utf-8 -*- import os from hashlib import md5, sha1, sha256 from zlib import crc32strFil ...
- MD5,SHA-1,SHA-256摘要加解密
2019独角兽企业重金招聘Python工程师标准>>> /*** 对字符串加密,加密算法使用MD5,SHA-1,SHA-256,默认使用SHA-256** @param strSrc ...
- 网络安全-安全散列函数,信息摘要SHA-1,MD5原理
-----------------------------------------------欢迎查看网络安全连载博客----------------------------------- [网络安全 ...
最新文章
- JavaScript中Object.prototype.toString方法的原理
- 【原】unity shader(3)反射贴图
- 解题报告 Toy Bricks
- 1128: mxh道歉记
- 问卷java_Java 问卷调查
- png在ai转为路径_png格式转为ai格式
- PHP案例 许愿墙 PHP许愿墙
- 律师学python有什么用呢_《律》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...
- RSS订阅微信公众号初探-feed43
- 2019软件测试学习教程(学习路线+课程大纲+视频教程+学习工具)
- 如何把pdf转成excel
- DC-DC升压和降压电路电感参数选择详解
- Oracle问题:如何远程连接Oracle数据库
- 小程序生成二维码分享朋友圈的功能
- Delphi 通过TNetHTTPClient访问http,最新解析快手无水印视频地址链接方法
- 您的WordPress网站的20个最佳会员插件
- 基于PyQt5实现界面控件自适应大小
- html程序员表白前端网页源码
- log4j2 日志打两遍的问题
- 12 数码管动态显示(6位)
热门文章
- 软件工程学习进度表(第八周)
- 巴拿马草帽matlab,MATLAB学习绘制图形.ppt
- linux 下远程桌面连接
- ChinaSkills-网络系统管理(2022年全国职业院校技能大赛-无线地勘平面布局图)
- 2022世界5G大会值得关注 中兴通讯主题演讲令我印象深刻
- 水星(MERCURY)MW150RM迷你无线路由器Client模式设置
- 保温杯哪种材质最好_保温杯的材质有哪几种?选购不锈钢保温杯有哪些技巧?...
- java postfix_邮件系统postfix
- 无需编程,我教你打造H5页面图片轮播效果
- 运筹说 第11期|线性规划之父—丹齐格