⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mddriver.c.bak

📁 毕业设计,md5在linux下的性能测试,加了linux下的时间测试函数!当然也可以加密解密!
💻 BAK
字号:
/* MDDRIVER.C - test driver for MD2, MD4 and MD5
 */


/* The following makes MD default to MD5 if it has not already been
  defined with C compiler flags.
 */
#ifndef MD
#define MD 5
#endif

#include <stdio.h>
#include <string.h>
#include "global.h"
#include "md5.h"
#include <sys/time.h>

/*定义测试块的长度,定义测试块数
 */
#define TEST_BLOCK_LEN 64
#define TEST_BLOCK_COUNT 2097152

static void MDString PROTO_LIST ((char *));
static void MDTimeTrial PROTO_LIST ((void));
static void MDTestSuite PROTO_LIST ((void));
static void MDFile PROTO_LIST ((char *));
static void MDPrint PROTO_LIST ((unsigned char [16]));


#define MD5_CTX MD5_CTX
#define MDInit MD5Init
#define MDUpdate MD5Update
#define MDFinal MD5Final


/* Main driver.

Arguments (可任意组合):
  -sstring - 摘要字符串
  -t       - 运行测试块
  -x       - 运行测试标准
  filename - 摘要文件
 */
int main (argc, argv)
int argc;

/*判断要执行的功能*/
char *argv[];
{
  int i;

  if (argc > 1)
 for (i = 1; i < argc; i++)
   if (argv[i][0] == '-' && argv[i][1] == 's')/*若为-s则执行摘要字符串功能*/
     MDString (argv[i] + 2);
   else if (strcmp (argv[i], "-t") == 0)      /*若为-t则执行测试速度功能*/
     MDTimeTrial ();
   else if (strcmp (argv[i], "-x") == 0)      /*若为-x则执行测试集功能*/
	 MDTestSuite ();  
   else
     MDFile (argv[i]);/*若为文件名则执行摘要文件功能*/

  return (0);
}

/* 摘要字符串,求时间,并输出结果.
 */
static void MDString (string)
char *string;
{
  MD5_CTX context;
  unsigned char digest[16];
  unsigned int len = strlen (string);
  struct timeval tstart ,tstop ;
  double telapsed ;
  
	gettimeofday(&tstart ,NULL) ;/*计时开始*/
  MDInit (&context);
  MDUpdate (&context, string, len);
  MDFinal (digest, &context);
  gettimeofday(&tstop ,NULL);/*计时结束*/
  telapsed = 1000000 * (tstop.tv_sec - tstart.tv_sec) +
	(tstop.tv_usec - tstart.tv_usec) ;
  telapsed /= 1000000 ;
  printf ("MD%d (\"%s\") = ", MD, string);
  MDPrint (digest);
  printf ("\nTime elapsed :%.10f (s)\n",telapsed);
  printf ("\n");

}

/* 测试摘要TEST_BLOCK_COUNT TEST_BLOCK_LEN-byte数据块所用时间.
 */
static void MDTimeTrial ()
{
  MD5_CTX context;
  unsigned char block[TEST_BLOCK_LEN], digest[16];
  unsigned int i;
  struct timeval tstart ,tstop ;
  double telapsed ;
  printf("Start now...\n") ;
  printf
 ("MD%d time trial. Digesting %d %d-byte blocks ...", MD,
  TEST_BLOCK_COUNT, TEST_BLOCK_LEN);

  /* 初始化数据块 */
  for (i = 0; i < TEST_BLOCK_LEN; i++)
  block[i] = (unsigned char)(i & 0xff);

  /* 开始计时 */
		gettimeofday(&tstart ,NULL) ;
  
  /* 循环加密数据块 */
 
  for (i = 0; i < TEST_BLOCK_COUNT; i++)
 {
  MDInit (&context);
  MDUpdate (&context, block, TEST_BLOCK_LEN);
  MDFinal (digest, &context);
 }

  /* 停止计时 */
  gettimeofday(&tstop ,NULL);
  telapsed = 1000000 * (tstop.tv_sec - tstart.tv_sec) +
	(tstop.tv_usec - tstart.tv_usec) ;
  telapsed /= 1000000 ;
  printf (" done\n");
  printf ("Digest = ");
  MDPrint (digest);
  printf("\nTime = %.10f seconds\n",telapsed);
  printf
 ("Speed = %.10f mb/second\n",
  (double)TEST_BLOCK_LEN * (double)TEST_BLOCK_COUNT/telapsed/128/1024);
}

/* 摘要参考字符串集,输出结果.
 */
static void MDTestSuite ()
{
	double elapsed = 0 ;

	
	printf ("MD%d test suite:\n", MD);
	
	MDString ("");
	MDString ("a");
	MDString ("abc");
	MDString ("message digest");
	MDString ("abcdefghijklmnopqrstuvwxyz");
	MDString
		("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
	MDString
	("1234567890123456789012345678901234567890\
	1234567890123456789012345678901234567890");

}

/* 摘要文件,输出结果.
 */
static void MDFile (filename)
char *filename;
{
	FILE *file;
	MD5_CTX context;
	int len;
	unsigned char buffer[4096], digest[16];

	struct timeval tstart ,tstop ;
	double telapsed ;
	
	if ((file = fopen (filename, "rb")) == NULL)
		printf ("%s can't be opened\n", filename);
	
	else {
		gettimeofday(&tstart ,NULL) ;
		MDInit (&context);
		while (len = fread (buffer, 1, 4096 , file))
			MDUpdate (&context, buffer, len);
		MDFinal (digest, &context);
		gettimeofday(&tstop ,NULL);
		fclose (file);
		telapsed = 1000000 * (tstop.tv_sec - tstart.tv_sec) +
			(tstop.tv_usec - tstart.tv_usec) ;
			printf ("MD%d (%s) = ", MD, filename);
		telapsed /= 1000000 ;
		MDPrint (digest);
		printf ("\nTime elapsed :%.10f (s)\n",telapsed);
	}
}

/* Prints a message digest in hexadecimal.
 */
static void MDPrint (digest)
unsigned char digest[16];
{

  unsigned int i;

  for (i = 0; i < 16; i++)
 printf ("%02x", digest[i]);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -