📄 md5.cpp
字号:
#include "MCRT/MD5.h"
#include "MD5_impl.h"
#include "MCRT/mfile.h"
mInt32 MD5_string( char digest[16], const char* pStr, mUInt32 lenStr )
{
if ( pStr == NULL )
{
return E_PARAM_POINTER_NULL;
}
MD5_CTX ctx;
MD5_init( &ctx );
MD5_update( &ctx, (unsigned char*)pStr, lenStr );
MD5_final( &ctx, (unsigned char*)digest );
return E_SUCCESS;
}
mInt32 MD5_string_32( char digest[32], const char* pStr, unsigned int lenStr )
{
if ( pStr == NULL )
{
return E_PARAM_POINTER_NULL;
}
MD5_CTX ctx;
char digest16[16];
MD5_init( &ctx );
MD5_update( &ctx, (unsigned char*)pStr, lenStr );
MD5_final( &ctx, (unsigned char*)digest16 );
for ( int i = 0; i < 16; ++ i )
{
sprintf( digest + 2*i, "%02x", (unsigned char)( digest16[i] ) );
}
return E_SUCCESS;
}
int MD5_file( char digest[16], const char* pFileName )
{
mInt32 retVal = E_SUCCESS;
for ( int iOnce = 0; iOnce < 1; ++ iOnce ) // convenient for releasing resources while failed
{
if ( pFileName == NULL )
{
retVal = E_PARAM_POINTER_NULL;
break;
}
MFile mfile;
retVal = mfile.Open( pFileName, MFile::MO_RDONLY );
if ( retVal != E_SUCCESS )
{
break;
}
MD5_CTX ctx;
char buf[M_BLOCK_BUF_SIZE];
mUInt32 bytesRead = 0;
MD5_init( &ctx );
while( (bytesRead = mfile.Read( buf, M_BLOCK_BUF_SIZE)) > 0 )
{
MD5_update( &ctx, (unsigned char*)buf, bytesRead );
}
MD5_final( &ctx, (unsigned char*)digest );
mfile.Close();
}
return retVal;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -