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几种摘要签名算法的效率,及实现对比及分析相关推荐

  1. vue.js中DES、RSA、SHA1、MD5这四种加密算法的使用

    vue.js中DES.RSA.SHA1.MD5这四种加密算法的使用 DES RSA SHA1 MD5 DES 美国 数据加密标准(DES)是对称密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也 ...

  2. 【原创】浅析密码学在互联网支付中的应用|RSA,Hash,AES,DES,3DES,SHA1,SHA256,MD5,SSL,Private Key,Public Key...

    一)概述 什么是互联网支付? 当支付遇到互联网,一场革命自然不可避免.成为现实的是传统的现金支付已经"退居二线",各种在线支付方式成为人们日常消费的主要支付方式.银行推出的网银以及 ...

  3. **超防 ja3+加速乐(三种加密(md5,sha1,sha256)) 实战(python爬虫js逆向)

    **超防 加速乐+ja3 实战(python爬虫js逆向) 地址 aHR0cHM6Ly93d3cuaGVmZWkuZ292LmNuL2NvbnRlbnQvY29sdW1uLzY3OTQ4MTE/cGF ...

  4. MD5 SHA1 SHA256 SHA512 SHA1WithRSA RSA 的区别

    转自:http://www.cnblogs.com/cxygg/p/9468653.html https://blog.csdn.net/hengshujiyi/article/details/459 ...

  5. 摘要/哈希/散列算法MD5 SHA1 SHA256 SHA512的区别和MAC算法

    目录 一.摘要算法大致都要经过以下步骤 1. 明文数据预处理 1.1 填充比特 1.2 附加消息长度 2. 摘要计算 2.1 常量初始化 2.2 分组及分组拓展和分组分段 2.3 轮函数(每段一轮,此 ...

  6. Python计算校验文件的MD5、SHA1、SHA256和CRC32,获取文件创建日期、修改日期和文件大小

    main.py # -*- coding: utf-8 -*- import os from hashlib import md5, sha1, sha256 from zlib import crc ...

  7. Python计算校验文件的MD5、SHA1、SHA256和CRC32

    # -*- coding: utf-8 -*- import os from hashlib import md5, sha1, sha256 from zlib import crc32strFil ...

  8. MD5,SHA-1,SHA-256摘要加解密

    2019独角兽企业重金招聘Python工程师标准>>> /*** 对字符串加密,加密算法使用MD5,SHA-1,SHA-256,默认使用SHA-256** @param strSrc ...

  9. 网络安全-安全散列函数,信息摘要SHA-1,MD5原理

    -----------------------------------------------欢迎查看网络安全连载博客----------------------------------- [网络安全 ...

最新文章

  1. JavaScript中Object.prototype.toString方法的原理
  2. 【原】unity shader(3)反射贴图
  3. 解题报告 Toy Bricks
  4. 1128: mxh道歉记
  5. 问卷java_Java 问卷调查
  6. png在ai转为路径_png格式转为ai格式
  7. PHP案例 许愿墙 PHP许愿墙
  8. 律师学python有什么用呢_《律》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...
  9. RSS订阅微信公众号初探-feed43
  10. 2019软件测试学习教程(学习路线+课程大纲+视频教程+学习工具)
  11. 如何把pdf转成excel
  12. DC-DC升压和降压电路电感参数选择详解
  13. Oracle问题:如何远程连接Oracle数据库
  14. 小程序生成二维码分享朋友圈的功能
  15. Delphi 通过TNetHTTPClient访问http,最新解析快手无水印视频地址链接方法
  16. 您的WordPress网站的20个最佳会员插件
  17. 基于PyQt5实现界面控件自适应大小
  18. html程序员表白前端网页源码
  19. log4j2 日志打两遍的问题
  20. 12 数码管动态显示(6位)

热门文章

  1. 软件工程学习进度表(第八周)
  2. 巴拿马草帽matlab,MATLAB学习绘制图形.ppt
  3. linux 下远程桌面连接
  4. ChinaSkills-网络系统管理(2022年全国职业院校技能大赛-无线地勘平面布局图)
  5. 2022世界5G大会值得关注 中兴通讯主题演讲令我印象深刻
  6. 水星(MERCURY)MW150RM迷你无线路由器Client模式设置
  7. 保温杯哪种材质最好_保温杯的材质有哪几种?选购不锈钢保温杯有哪些技巧?...
  8. java postfix_邮件系统postfix
  9. 无需编程,我教你打造H5页面图片轮播效果
  10. 运筹说 第11期|线性规划之父—丹齐格