数据摘要算法的测试效率(SHA、MD5和CRC32)

1、算法概述

数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密。数据摘要算法也被称为哈希(Hash)算法或散列算法。

1.1 CRC8、CRC16、CRC32

CRC(Cyclic Redundancy Check,循环冗余校验)算法出现时间较长,应用也十分广泛,尤其是通讯领域,现在应用最多的就是 CRC32 算法,它产生一个4字节(32位)的校验值,一般是以8位十六进制数,如FA 12 CD 45等。CRC算法的优点在于简便、速度快,严格的来说,CRC更应该被称为数据校验算法,但其功能与数据摘要算法类似,因此也作为测试的可选算法。

  在 WinRAR、WinZIP 等软件中,也是以 CRC32 作为文件校验算法的。一般常见的简单文件校验(Simple File Verify – SFV)也是以 CRC32算法为基础,它通过生成一个后缀名为.SFV 的文本文件,这样可以任何时候可以将文件内容 CRC32运算的结果与 .SFV 文件中的值对比来确定此文件的完整性。与 SFV 相关工具软件有很多,如MagicSFV、MooSFV等。

1.2 MD2 、MD4、MD5

  这是应用非常广泛的一个算法家族,尤其是 MD5(Message-Digest Algorithm 5,消息摘要算法版本5),它由MD2、MD3、MD4发展而来,由Ron Rivest(RSA公司)在1992年提出,目前被广泛应用于数据完整性校验、数据(消息)摘要、数据加密等。MD2、MD4、MD5 都产生16字节(128位)的校验值,一般用32位十六进制数表示。MD2的算法较慢但相对安全,MD4速度很快,但安全性下降,MD5比MD4更安全、速度更快。

  目前在互联网上进行大文件传输时,都要得用MD5算法产生一个与文件匹配的、存储MD5值的文本文件(后缀名为 .md5或.md5sum),这样接收者在接收到文件后,就可以利用与 SFV 类似的方法来检查文件完整性,目前绝大多数大型软件公司或开源组织都是以这种方式来校验数据完整性,而且部分操作系统也使用此算法来对用户密码进行加密,另外,它也是目前计算机犯罪中数据取证的最常用算法。与MD5 相关的工具有很多,如 WinMD5等。

1.3 SHA1、SHA256、SHA384、SHA512

  SHA(Secure Hash Algorithm)是由美国专门制定密码算法的标准机构——美国国家标准技术研究院(NIST)制定的,SHA系列算法的摘要长度分别为:SHA为20字节(160位)、SHA256为32字节(256位)、 SHA384为48字节(384位)、SHA512为64字节(512位),由于它产生的数据摘要的长度更长,因此更难以发生碰撞,因此也更为安全,它是未来数据摘要算法的发展方向。由于SHA系列算法的数据摘要长度较长,因此其运算速度与MD5相比,也相对较慢。

  目前SHA1的应用较为广泛,主要应用于CA和数字证书中,另外在目前互联网中流行的BT软件中,也是使用SHA1来进行文件校验的。

1.4 RIPEMD、PANAMA、TIGER、ADLER32 等

  RIPEMD是Hans Dobbertin等3人在对MD4,MD5缺陷分析基础上,于1996年提出来的,有4个标准128、160、256和320,其对应输出长度分别为16字节、20字节、32字节和40字节。TIGER由Ross在1995年提出。Tiger号称是最快的Hash算法,专门为64位机器做了优化。

2、算法测试

2.1 测试方法

  • 测试范围 :常见的数据校验、摘要算法,主要有 CRC32、MD5、SHA1、SHA256、SHA384、SHA512
  • 样本数据 :2G大小Vmware 虚拟机操作系统的磁盘文件,其中包含其中各种类型的文件,如二进制文件和文本文件等。
  • 软件平台 :Windows、.NET Framework 2.0
  • 硬件平台 :
    • 机器A(SCSI Disk):软件配置 Windows 2000 + .Net Framework 2.0;硬件配置 CPU:4 (Xeon),2.8G,RAM:2G ,HD:70 GB SCSI
    • 机器B(IDE Disk):软件配置 Windows 2003 + .Net Framework 2.0;硬件配置 CPU:1 (P4),2.8G,RAM:1G,HD:40 GB IDE

  考虑到整个测试过程只是涉及到文件读取与哈希值的计算,并无过多的与操作系统、软件平台、开发语言相关的操作,因此可以认为上述测试方法的结果具有普遍性,即也适用于其它操作系统平台(如Linux/Unix)或应用语言/平台(C、Java)。

2.2 测试结果

  1)不同配置机器间的对比

  在不同机器配置上的平均运算结果如下表所示:

  注1:配有SCSI磁盘的机器运行时间反而比 IDE 磁盘时间长,可能是由于前者具有较多的应用负载造成的,如Oracle、WebSphere等,而且其OS为 Windows 2000,在之上运行 .NET 应用程序可能与 Windows 2003 的效率有所差别

  注2:上述算法中,只有 CRC32 没有包含在.NET Framework 中,而是使用C#单独实现的,因此可能会对其测试结果带来一些影响。

  2)不同算法的CPU占用率比较

  在不同的算法运行时,在机器B上监控其对于 CPU 的平均使用时间,结果如下表所示:

3、实验结论

  • 数据摘要算法的处理是很快的,在一般配置的PC机上使用MD5算法,处理1G的文件数据只需20-30秒(有些专用设备声称达 3GB/秒),不会对应用或机器带来过多负载
  • MD5、SHA1虽然被发现存在缺陷(碰撞),但在近几年内,仍然可以大量使用
  • SHA256/384/512 的速度较慢,可以用于少量数据摘要,目前不适合用于大文件校验

  CRC32为32bit的简单hash,MD5为128bit较复杂的hash算法。直觉上貌似CRC32的计算速度要比MD5快的。今天用FlexHEX计算大文件的hash时发现CRC32相对MD5并没有明显优势。

  实验发现:Linux操作系统下用md5sum和cksum取文件哈希:MD5仅花费CRC32时间的72%左右。

  • MD5计算速度要明显优于CRC32!

4、文章来源

1)http://dearymz.blog.163.com/blog/static/205657420116205415458/

2)http://www.getcn.net/index.php?mod=skill&action=detail&id=43881

数据摘要算法的测试效率(SHA、MD5和CRC32)

时间: 2024-10-31 07:09:11

数据摘要算法的测试效率(SHA、MD5和CRC32)的相关文章

大数据量分页存储过程效率测试附代码

在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话. 测试环境 硬件:CPU 酷睿双核T5750  内存:2G 软件:Windows server 2003    +   Sql server 2005 OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable 按 Ctrl+C 复制代码1create database data_Test --创建数据库data_Test 2GO 3use data

自动化测试更适合缺陷预防,而不是提高测试效率

很多人在回答为什么要开展自动化测试时,立即回想到的答案是提高测试效率. 这种回答本身并没有错,但我想这只是问题的次要方面.在经过数次的自动化测试时间投入与效益比来看, 可以基本得出,基于某个场景的测试脚本,在没有变更与维护情况下,脚本执行频率大于5-7次才基本能够收回 投入成本,产生自动化效益.基于互联网的产品条件下,一个项目或系统如果包含 > =100个测试场景,事实远超这个数据的N倍,其实很难能够保证在收回自动化效益后,场景业务或数据才变更,通常变更是无法预期的或难以控制. 从技术的手段来保

CIO访谈实录丨渤海人寿携手SmartX超融合大幅提升开发测试效率

客户访谈:金融/保险业 新金融科技时代,数据的可靠性及平台计算性能是核心要义:新业务上线拓展的迅捷性,更是激烈竞争中重要的取胜之匙.在创新技术驱动业务发展理念的指引下,保险行业新兴寿险企业渤海人寿选择 SmartX 帮助企业率先启用超融合架构,在降低运维成本的基础上同时满足了高性能的需求,大幅提升开发测试效率,用技术利器推动业务不断优化上线,保持持续迅猛增长. 以下是我们对渤海人寿信息技术部负责人的访谈文字实录,客观呈现了超融合在渤海人寿 IT 架构转型升级中的应用实践,以及在提升开发测试效率方

mybatis学习之路----批量更新数据两种方法效率对比

原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方式有两种, 一种用for循环通过循环传过来的参数集合,循环出N条sql, 另一种 用mysql的case when 条件判断变相的进行批量更新 下面进行实现. 注意第一种方法要想成功,需要在db链接url后面带一个参数  &allowMultiQueries=true 即:  jdbc:mysql:

如何提高短平快项目的测试效率?

                         如何提高短平快项目的测试效率?                                                    研发资深顾问  杨学明   最近几年,笔者在全国各地包括深圳,北京,上海,杭州,武汉,济南等大中城市开设了近百场测试公开课程,也帮助许多创新型企业进行了产品测试或软件测试管理的内训,大的企业有中航工业.中科院.中国电力研究院.华立仪表.深圳迈瑞等等,也有一些中小型的企业,总体来说,目前中国国内的各公司的测试体系还不

如何提高测试效率

背景: 目前互联网企业,产品更新迭代快,版本发布周期短,预留测试的时间及其短,这样子导致一个问题,产品质量不过关,产品测试员又累,两败俱伤,楼主所在的公司工作了三个多月,把我如何提高测试效率的方式分享给大家,不足之处欢迎留言吐槽. 措施: 1,规范测试流程 从产品需求到设计,全程参与,在原型图出来之后,写测试用例点,建议使用xmind写测试用例点,标好级别:用xmind写用第一个好处是可以理清业务逻辑,第二个是能提高编写用例的时间,方便管理维护 2,自测 开发人员在开发产品过程中,有些功能先开发

手工测试 测试框架?如何提高测试效率?

百度了一下“测试框架”,搜索结果大部分都是“自动化测试框架”.“单元测试框架”,没有手工测试框架.但是所谓框架不就是把“共性部分形成的体系”提高效率和质量吗? 做测试3年,现在想的更多的是如何提高测试效率和保证测试用例的覆盖率.目前所在的是公司是互联网公司(之前一直在传统软件公司工作),节奏很快,测试周期很短.产品需求文档的完善程度也是参差不齐,然后测试时间又比较紧急,除了个别庞大的项目外,领导不会专门预留编写测试用例的时间. 事件一,2015/12/8,领导安排我和另外一个同事测试一个新增节点

JAVA 大数据内存耗用测试

JAVA 大数据内存耗用测试import java.lang.management.ManagementFactory;import java.lang.management.MemoryMXBean; public class MemoryTest { public static void main(String[] args) throws InterruptedException { int row = 50_000; int column = 20; String[] data = ne

如何提高软件质量及测试效率

首先要搞清楚从哪些方面去关注质量,关注质量一般情况都是从以下方面去关注: 1.行业标准和规范: 2.需求分析(用户需求分析,产品继承需求分析,竞品分析): 3.开发设计方案分析.编码规则分析 4.测试 其次,如何提交软件产品质量呢,以下列举几个部分: 1.从项目开始时则安排测试人员进入 2.正确理解需求.分析需求 3.制定相关标准和规范,Team统一执行 4.审查开发活动及开展单元测试 5.记录开发活动与软件产品的偏差,及时讨论 6.记录不符合需求项和Bug缺陷跟踪,及时报告高级管理者 最后插一