mdc.cpp

来自「包含客户和服务器的升级程序,在linux下可以运行的.」· C++ 代码 · 共 181 行

CPP
181
字号
/* * Copyright (C) 2006, Binary Ma * Licence: GNU GPL 1991 - version 2 * Bug report: binary@eniak.org*/#include "mdc.h"#include <string.h>static const char* VERSION = "0.6.1";static int hex2str( const unsigned char* buf, char* store, unsigned int len ){    for( unsigned int i = 0; i < len; i++ )    {        sprintf( &store[i*2], "%02x", *(buf + i) );    }    return 0;}mdmethod::mdmethod( MDCTYPE type ){	switch( type )	{	case MDC_MD5:        md_type = EVP_md5();        break;        	case MDC_MD4:		md_type = EVP_md4();		break;			case MDC_MD2:		md_type = EVP_md2();		break;			case MDC_SHA:		md_type = EVP_sha();		break;			case MDC_SHA1:		md_type = EVP_sha1();		break;			case MDC_DSS:		md_type = EVP_dss();		break;			case MDC_DSS1:		md_type = EVP_dss1();		break;		    default:        md_type = EVP_md5();        break;	}	error = 0;	md_ctx = NULL;	if( NULL == md_type )	{		error = -__LINE__;		return;	}	md_ctx = EVP_MD_CTX_create();	EVP_MD_CTX_init( md_ctx );}mdmethod::~mdmethod(){	if( NULL != md_ctx )		EVP_MD_CTX_destroy( md_ctx );}const char* mdmethod::sum_file( const char* file ){	if( error || NULL == file )		return NULL;		FILE* fp = fopen( file, "r" );	if( NULL == fp )	{		error = -__LINE__;		return NULL;	}	unsigned char tmp[EVP_MAX_MD_SIZE + 1];	bzero( tmp, sizeof( tmp ) );	int retval = EVP_DigestInit_ex( md_ctx, md_type, NULL );	if( retval != 1 )	{		error = -__LINE__;		return NULL;	}	char read_buf[8192];	int read_size = 0;	while( 0 == feof( fp ) )	{	    bzero( read_buf, sizeof( read_buf ) );		read_size = fread( read_buf, sizeof( *read_buf ), sizeof( read_buf ), fp );		if( ferror( fp ) )		{			error = -__LINE__;			break;		}		retval = EVP_DigestUpdate( md_ctx, read_buf, read_size );		if( retval != 1 )		{			error = -__LINE__;			break;		}	}		fclose( fp );	if( error )		return NULL;		unsigned int len = 0;	retval = EVP_DigestFinal_ex( md_ctx, tmp, &len );	if( retval != 1 )	{		error = -__LINE__;		return NULL;	}	bzero( sum, sizeof( sum ) );	hex2str( tmp, sum, len );	return sum;}const char* mdmethod::sum_data( const void* buf, int size ){	if( error )		return NULL;	if( NULL == buf )	{		error = -__LINE__;		return NULL;	}	unsigned char tmp[EVP_MAX_MD_SIZE + 1];	bzero( tmp, sizeof( tmp ) );	int retval = EVP_DigestInit_ex( md_ctx, md_type, NULL );	if( retval != 1 )	{		error = -__LINE__;		return NULL;	}		retval = EVP_DigestUpdate( md_ctx, buf, size );	if( retval != 1 )	{		error = -__LINE__;		return NULL;	}	unsigned int len = 0;	retval = EVP_DigestFinal_ex( md_ctx, tmp, &len );	if( retval != 1 )	{		error = -__LINE__;		return NULL;	}		bzero( sum, sizeof( sum ) );	hex2str( tmp, sum, len );	return sum;}const char* mdmethod::sum_last(){    return sum;}

⌨️ 快捷键说明

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