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 + -
显示快捷键?