MD5算法性能测试

MD5算法性能测试                                               

(一)          实验目的

本次实验的主要目的是测试中大量使用MD5运算是否对网站或者系统带来性能方面的影响

(二)          实验场景

根据实验目的,设计了如下三个场景:

1. 单线程下 运行5000 计算平均时间(分别运算100K;200K;300k;字符)

2. 20个线程 共运行5000 计算平均时间(分别运算100K;200K;300k;字符)

3. 20个线程 持续运算3小时压力测试 计算平均时间和cup占用情况(运算300k字符)

(三)          测试环境

CPU

Intel(R) Core(TM)2 Duo CPU E7500 2.93G

内存

3.0G

本人使用PC(非专用服务器)

 

(四)          主要测试程序

1.         单线程主要测试程序:

        Stopwatch sw = new Stopwatch();

ArrayList arry = new ArrayList();

        for (int i = 0; i < 5000; i++)

        {

            byte[] strByte = Encoding.UTF8.GetBytes(strValue);

sw.Start();

            MD5Hash(strByte);

            sw.Stop();

            arry.Add(sw.Elapsed.TotalMilliseconds);

            sw.Reset();

        }

 

//md5算法

   private void MD5Hash(byte[] bytes)

    {

        MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();

        provider.ComputeHash(bytes);

}

2.         多线程主要测试程序

          int MaxThread = 20; decimal totle = 0;

            Console.WriteLine("执行开始时间:{0}",DateTime.Now);

            Stopwatch sw = new Stopwatch();

            sw.Start();

            ManualResetEvent[] manualEvents =new ManualResetEvent[MaxThread];

            for (int i = 0; i < MaxThread;i++)

            {

                manualEvents[i] = new ManualResetEvent(false);

                MD5info objMD5info = new MD5info(i, manualEvents[i]);

                MD5Test objMd5test = new MD5Test();

                objMd5test.Size = 300;

                ThreadPool.QueueUserWorkItem(new WaitCallback(objMd5test.MD5output),objMD5info);

            }

         WaitHandle.WaitAll(manualEvents);

(五)        测试结果

1.         5000次测试结果

运算字符串大小

执行次数

响应时间(毫秒)

20线程 响应时间

100K

5000

0.14ms

0.153ms(20个线程)

200K

5000

0.32ms

0.31ms(20个线程)

300K

5000

0.54ms

0.471ms(20个线程)

2.         3小时持续运算压力测试结果

具体场景设计如下:

每个线程执行次数100000  

执行线程数20

每次执行间隔时间  0.1S

 每次运算字节数 相当于300K大小的网页

 开始时间: 15:07:58 结束时间16:39:46其中程序运行总时长11053.451秒约合 3小时4

 算法平均运算时间 0.73545毫秒

具体执行结果如下

根据perfmon跟踪的cpu变化 如下图

 

 

根据上图可以看出在持续3小时的算法测试中 cup平均使用率只有5.487%,需要指出的是这个cpu的使用率是整个实验程序的和windows本身其它内部程序的耗损之和,真正MD5算法只占其中的一部分,在上述实验场景的测试中我们发现cpu的使用率长期稳定在8%,说明算法可能占据了一部分cpu,但是这个占用率还是比较小的。

(六)          实验总结:

综上所述 在单独的算法测试中MD5耗时均小于1毫秒,时间很短,在长达3小时的多线程压力测试情况下,算法的平均算法用时0.74mscpu占用率大部分维持在低位状态8%,但是实际的应用场景运算频率要远远小于上述实验场景,加之我们只是采用普通的pc机进行的测试,所以在实际应用中MD5算法对服务器cpu的压力几乎可以忽略掉。

(七)          附实验程序:

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
HMAC(Hash-based Message Authentication Code)是一种基于散列函数的消息认证码。MD5(Message Digest Algorithm 5)是一种流行的散列函数,常用于生成消息摘要。Verilog是一种硬件描述语言,用于编写数字电路的模块化描述。 HMAC MD5 Verilog是指使用Verilog语言实现HMAC MD5算法。 HMAC MD5算法的步骤如下: 1. 初始化:设置密钥和填充常量,并进行预处理。 2. 转换:将消息分割成64字节的块,并进行一系列的变换操作。 3. 输出:输出最终的消息摘要。 在使用Verilog语言实现HMAC MD5算法时,我们可以按照以下步骤进行设计: 1. 设计输入和输出接口:设计模块的输入包括密钥和消息,输出为生成的消息摘要。 2. 实现预处理步骤:对输入的密钥和消息进行预处理,包括对密钥的长度进行调整和填充常量的设置。 3. 实现主要的转换操作:将消息分割成块并进行一系列的变换操作,包括将消息块进行扩展、散列函数的调用以及结果的累加操作。 4. 设计输出模块:输出最终的消息摘要。 5. 进行模块的集成和验证:将各个模块进行集成,并进行功能验证和性能测试。 通过按照以上步骤进行设计和实现,我们可以使用Verilog语言构建HMAC MD5算法的硬件模块。这样的设计可以在硬件上高效地进行HMAC MD5的计算任务,提高系统的安全性和性能。 总结:HMAC MD5 Verilog是指使用Verilog语言实现HMAC MD5算法。通过遵循HMAC MD5算法的步骤,我们可以设计和实现相应的硬件模块,从而在硬件上高效地运行HMAC MD5算法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值