首页 > 编程语言 > 详细

c++builder CryptoAPI md5

时间:2015-07-28 00:21:47      阅读:442      评论:0      收藏:0      [点我收藏+]

#include <wincrypt.h>

DWORD GetHash(
    CONST BYTE * pbData,
    DWORD        dwDataLen,
    ALG_ID       algId,
    LPTSTR       pszHash )
{
    DWORD dwReturn = 0;
    HCRYPTPROV hProv;
    if ( !CryptAcquireContext( &hProv, NULL, NULL, PROV_RSA_FULL,
        CRYPT_VERIFYCONTEXT ) )
    {
        return ( dwReturn = GetLastError( ) );
    }

    HCRYPTHASH hHash;
    // Alg Id:CALG_MD5,CALG_SHA
    if ( !CryptCreateHash( hProv, algId, 0, 0, &hHash ) )
    {
        dwReturn = GetLastError( );
        CryptReleaseContext( hProv, 0 );
        return dwReturn;
    }

    if ( !CryptHashData( hHash, pbData, dwDataLen, 0 ) )
    {
        dwReturn = GetLastError( );
        CryptDestroyHash( hHash );
        CryptReleaseContext( hProv, 0 );
        return dwReturn;
    }

    DWORD dwSize;
    DWORD dwLen = sizeof( dwSize );
    CryptGetHashParam( hHash, HP_HASHSIZE, ( BYTE * )( & dwSize ), & dwLen, 0 );

    BYTE * pHash = new BYTE[ dwSize ];
    dwLen = dwSize;
    CryptGetHashParam( hHash, HP_HASHVAL, pHash, & dwLen, 0 );

    lstrcpy( pszHash, _T( "" ) );
    TCHAR szTemp[ 3 ];
    for ( DWORD i = 0; i < dwLen; ++i )
    {
        // wsprintf(szTemp, _T("%X%X"), pHash[i] >> 4, pHash[i] & 0xf);
        wsprintf( szTemp, L"%02X", pHash[ i ] );
        lstrcat( pszHash, szTemp );
    }
    delete[ ]pHash;

    CryptDestroyHash( hHash );
    CryptReleaseContext( hProv, 0 );
    return dwReturn;
}

void __fastcall TForm2::Button2Click( TObject * Sender )
{
    char szStr[ 20 ] =    {        0 } ;
    TCHAR szHash[ 41 ] = {    0    } ;

    strcpy( szStr, "ww" ); // wcscpy
    GetHash( ( BYTE * )szStr, strlen( szStr ), CALG_MD5, szHash );
    Caption = szHash;

    strcpy( szStr, "ww" ); // wcscpy
    GetHash( ( BYTE * )szStr, strlen( szStr ), CALG_MD5, szHash );
    Caption = szHash;
    //
    // strwcpy( szStr, "测试SHA" );
    // GetHash( ( BYTE * )szStr, strlen( szStr ), CALG_SHA, szHash );
    // MessageBox( NULL, szHash, szStr, MB_OK );
}

 

c++builder CryptoAPI md5

原文:http://www.cnblogs.com/cb168/p/4681460.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!