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

📄 md5.cpp

📁 跨平台C++基础库
💻 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 + -