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

📄 md5.c

📁 哈希源程序代码
💻 C
字号:
/* * $Id: md5.c,v 1.7.2.2 1998/03/06 08:15:33 jkh Exp $ * * Derived from: *//* * MDDRIVER.C - test driver for MD2, MD4 and MD5 *//* *  Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All *  rights reserved. * *  RSA Data Security, Inc. makes no representations concerning either *  the merchantability of this software or the suitability of this *  software for any particular purpose. It is provided "as is" *  without express or implied warranty of any kind. * *  These notices must be retained in any copies of any part of this *  documentation and/or software. */#include <sys/types.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <unistd.h>#include "md5.h"#include "global.h"/* * Length of test block, number of test blocks. */#define TEST_BLOCK_LEN 1000#define TEST_BLOCK_COUNT 1000static void MDString PROTO_LIST((char *));static void MDTimeTrial PROTO_LIST((void));static void MDTestSuite PROTO_LIST((void));static void MDFilter PROTO_LIST((int));static void usage PROTO_LIST((void));/* Main driver.Arguments (may be any combination):  -sstring - digests string  -t       - runs time trial  -x       - runs test script  filename - digests file  (none)   - digests standard input */intmain(argc, argv)	int     argc;	char   *argv[];{	int     ch;	char   *p;	char	buf[33];	if (argc > 1) {		while ((ch = getopt(argc, argv, "ps:tx")) != -1) {			switch (ch) {			case 'p':				MDFilter(1);				break;			case 's':				MDString(optarg);				break;			case 't':				MDTimeTrial();				break;			case 'x':				MDTestSuite();				break;			default:				usage();			}		}		while (optind < argc) {			p = MD5File(argv[optind], buf);			if (!p)				perror(argv[optind]);			else				printf("MD5 (%s) = %s\n", argv[optind], p);			optind++;		}	} else		MDFilter(0);	return (0);}/* * Digests a string and prints the result. */static voidMDString(string)	unsigned char   *string;{	unsigned int len = strlen(string);	char buf[33];	printf("MD5 (\"%s\") = %s\n", string, MD5Data(string, len, buf));}/* * Measures the time to digest TEST_BLOCK_COUNT TEST_BLOCK_LEN-byte blocks. */static voidMDTimeTrial(){	MD5_CTX context;	time_t  endTime, startTime;	unsigned char block[TEST_BLOCK_LEN];	unsigned int i;	char   *p, buf[33];	printf	    ("MD5 time trial. Digesting %d %d-byte blocks ...",	    TEST_BLOCK_COUNT, TEST_BLOCK_LEN);	/* Initialize block */	for (i = 0; i < TEST_BLOCK_LEN; i++)		block[i] = (unsigned char) (i & 0xff);	/* Start timer */	time(&startTime);	/* Digest blocks */	MD5Init(&context);	for (i = 0; i < TEST_BLOCK_COUNT; i++)		MD5Update(&context, block, TEST_BLOCK_LEN);	p = MD5End(&context,buf);	/* Stop timer */	time(&endTime);	printf(" done\n");	printf("Digest = %s", p);	printf("\nTime = %ld seconds\n", (long) (endTime - startTime));	/* Be careful that endTime-startTime is not zero. (Bug fix from Ric	 * Anderson, ric@Artisoft.COM.) */	printf	    ("Speed = %ld bytes/second\n",	    (long) TEST_BLOCK_LEN * (long) TEST_BLOCK_COUNT / ((endTime - startTime) != 0 ? (endTime - startTime) : 1));}/* * Digests a reference suite of strings and prints the results. */static voidMDTestSuite(){	printf("MD5 test suite:\n");	MDString("");	MDString("a");	MDString("abc");	MDString("message digest");	MDString("abcdefghijklmnopqrstuvwxyz");	MDString	    ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");	MDString	    ("1234567890123456789012345678901234567890\1234567890123456789012345678901234567890");}/* * Digests the standard input and prints the result. */static voidMDFilter(pipe)	int pipe;{	MD5_CTX context;	int     len;	unsigned char buffer[BUFSIZ];	char buf[33];	MD5Init(&context);	while ((len = fread(buffer, 1, BUFSIZ, stdin))) {		if(pipe && (len != fwrite(buffer, 1, len, stdout))) {			perror("stdout");			exit(1);		}		MD5Update(&context, buffer, len);	}	printf("%s\n", MD5End(&context,buf));}static voidusage(){	fprintf(stderr, "usage: md5 [-ptx] [-s string] [files ...]\n");	exit(1);}

⌨️ 快捷键说明

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