EDN Admin
Well-known member
Igor
Sorry to bother you
Im wrapping up my program, and my md5 hash function is producing an error 87 on CryptGetHashParam in Windows 7 only. The hHash is 7. Works fine in Vista and XP.
I added the GetLastError to pull an error code. Not sure what to make of it at this moment.
Its late, going home to crash right now. If you have any insight, I could use it right now, I did make a code change and changed DWORD dwOutput to LPDWORD dwOutput, maybe thats the problem.
Thanks Igor, hope your still out there!<span style="font-size:small <span style="font-size:small
BYTE* CA_Encryption::_create_MD5_Hash( WCHAR *pzInputW, LPDWORD dwOutput )
{
BOOL bResult = FALSE;
HCRYPTPROV hProv;
HCRYPTHASH hHash;
BYTE *szBuffer = NULL;
DWORD dwHashLen = 0;
DWORD dwErrorCode = 0;
<span style="color:#008000; font-size:small <span style="color:#008000; font-size:small <span style="color:#008000; font-size:small // Get the size of the conversion<span style="color:#008000; font-size:small <span style="color:#008000; font-size:small <span style="color:#008000; font-size:small <span style="color:#008000; font-size:small <span style="color:#008000; font-size:small <span style="color:#008000; font-size:small <span style="font-size:small <span style="font-size:small
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small int<span style="font-size:small <span style="font-size:small iCharA = (WideCharToMultiByte(CP_UTF8,
0, pzInputW, -1, NULL, 0, NULL, NULL) - 1); <span style="font-size:small <span style="font-size:small
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small char<span style="font-size:small <span style="font-size:small *szInputA =
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small new<span style="font-size:small <span style="font-size:small
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small char<span style="font-size:small <span style="font-size:small [iCharA];<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
WideCharToMultiByte(CP_UTF8, 0, pzInputW, -1, szInputA, iCharA, NULL, NULL);
DWORD dwBufferSize = 0;
DWORD dwPasswordLen = iCharA;
bResult = CryptAcquireContextW( &hProv, NULL, MS_STRONG_PROV, PROV_RSA_FULL, 0);
bResult = CryptCreateHash( hProv, CALG_MD5, 0, 0, &hHash );
bResult = CryptHashData( hHash, (BYTE*)szInputA, dwPasswordLen, 0 );
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small if<span style="font-size:small <span style="font-size:small (CryptGetHashParam( hHash, HP_HASHVAL,
NULL, &dwHashLen, 0 ) ) {<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small if<span style="font-size:small <span style="font-size:small (( *dwOutput > 0 ) && (
*dwOutput < 4096)) {<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
szBuffer =
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small new<span style="font-size:small <span style="font-size:small BYTE[dwHashLen+1];<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
CryptGetHashParam( hHash, HP_HASHVAL, szBuffer, &dwHashLen, 0 );
*dwOutput = dwHashLen;
szBuffer[dwHashLen] = 0;
}
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small else<span style="font-size:small <span style="font-size:small {<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
*dwOutput = dwHashLen+1;
szBuffer = L
<span style="color:#a31515; font-size:small <span style="color:#a31515; font-size:small <span style="color:#a31515; font-size:small <span style="font-size:small <span style="font-size:small ;<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
}
}
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small else<span style="font-size:small <span style="font-size:small {<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
dwErrorCode = GetLastError();
*dwOutput = 1;
szBuffer = L
<span style="color:#a31515; font-size:small <span style="color:#a31515; font-size:small <span style="color:#a31515; font-size:small <span style="font-size:small <span style="font-size:small ;<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
}
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small delete<span style="font-size:small <span style="font-size:small [] szInputA;<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small return<span style="font-size:small <span style="font-size:small szBuffer;<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
}
<a> <a>
View the full article
Sorry to bother you
Im wrapping up my program, and my md5 hash function is producing an error 87 on CryptGetHashParam in Windows 7 only. The hHash is 7. Works fine in Vista and XP.
I added the GetLastError to pull an error code. Not sure what to make of it at this moment.
Its late, going home to crash right now. If you have any insight, I could use it right now, I did make a code change and changed DWORD dwOutput to LPDWORD dwOutput, maybe thats the problem.
Thanks Igor, hope your still out there!<span style="font-size:small <span style="font-size:small
BYTE* CA_Encryption::_create_MD5_Hash( WCHAR *pzInputW, LPDWORD dwOutput )
{
BOOL bResult = FALSE;
HCRYPTPROV hProv;
HCRYPTHASH hHash;
BYTE *szBuffer = NULL;
DWORD dwHashLen = 0;
DWORD dwErrorCode = 0;
<span style="color:#008000; font-size:small <span style="color:#008000; font-size:small <span style="color:#008000; font-size:small // Get the size of the conversion<span style="color:#008000; font-size:small <span style="color:#008000; font-size:small <span style="color:#008000; font-size:small <span style="color:#008000; font-size:small <span style="color:#008000; font-size:small <span style="color:#008000; font-size:small <span style="font-size:small <span style="font-size:small
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small int<span style="font-size:small <span style="font-size:small iCharA = (WideCharToMultiByte(CP_UTF8,
0, pzInputW, -1, NULL, 0, NULL, NULL) - 1); <span style="font-size:small <span style="font-size:small
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small char<span style="font-size:small <span style="font-size:small *szInputA =
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small new<span style="font-size:small <span style="font-size:small
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small char<span style="font-size:small <span style="font-size:small [iCharA];<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
WideCharToMultiByte(CP_UTF8, 0, pzInputW, -1, szInputA, iCharA, NULL, NULL);
DWORD dwBufferSize = 0;
DWORD dwPasswordLen = iCharA;
bResult = CryptAcquireContextW( &hProv, NULL, MS_STRONG_PROV, PROV_RSA_FULL, 0);
bResult = CryptCreateHash( hProv, CALG_MD5, 0, 0, &hHash );
bResult = CryptHashData( hHash, (BYTE*)szInputA, dwPasswordLen, 0 );
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small if<span style="font-size:small <span style="font-size:small (CryptGetHashParam( hHash, HP_HASHVAL,
NULL, &dwHashLen, 0 ) ) {<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small if<span style="font-size:small <span style="font-size:small (( *dwOutput > 0 ) && (
*dwOutput < 4096)) {<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
szBuffer =
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small new<span style="font-size:small <span style="font-size:small BYTE[dwHashLen+1];<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
CryptGetHashParam( hHash, HP_HASHVAL, szBuffer, &dwHashLen, 0 );
*dwOutput = dwHashLen;
szBuffer[dwHashLen] = 0;
}
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small else<span style="font-size:small <span style="font-size:small {<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
*dwOutput = dwHashLen+1;
szBuffer = L
<span style="color:#a31515; font-size:small <span style="color:#a31515; font-size:small <span style="color:#a31515; font-size:small <span style="font-size:small <span style="font-size:small ;<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
}
}
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small else<span style="font-size:small <span style="font-size:small {<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
dwErrorCode = GetLastError();
*dwOutput = 1;
szBuffer = L
<span style="color:#a31515; font-size:small <span style="color:#a31515; font-size:small <span style="color:#a31515; font-size:small <span style="font-size:small <span style="font-size:small ;<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
}
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small delete<span style="font-size:small <span style="font-size:small [] szInputA;<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
<span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small <span style="color:#0000ff; font-size:small return<span style="font-size:small <span style="font-size:small szBuffer;<span style="font-size:small <span style="font-size:small <span style="font-size:small <span style="font-size:small
}
<a> <a>
View the full article