I used SHA256 algorithm for getting hash.
THe hash produced by my application is not same as the one generated by online tools for the same string.
What I have tried:
BCRYPT_ALG_HANDLE hAlg = NULL;
BCRYPT_HASH_HANDLE hHash = NULL;
NTSTATUS status = STATUS_UNSUCCESSFUL;
DWORD cbData = 0,
cbHash = 0,
cbHashObject = 0;
PBYTE pbHashObject = NULL;
PBYTE pbHash = NULL;
if(!NT_SUCCESS(status = BCryptOpenAlgorithmProvider(
&hAlg,
BCRYPT_SHA256_ALGORITHM,
NULL,
0)))
{
goto Cleanup;
}
if(!NT_SUCCESS(status = BCryptGetProperty(
hAlg,
BCRYPT_OBJECT_LENGTH,
(PBYTE)&cbHashObject,
sizeof(DWORD),
&cbData,
0)))
{
goto Cleanup;
}
pbHashObject = (PBYTE)HeapAlloc (GetProcessHeap (), 0, cbHashObject);
if(NULL == pbHashObject)
{
goto Cleanup;
}
if(!NT_SUCCESS(status = BCryptGetProperty(
hAlg,
BCRYPT_HASH_LENGTH,
(PBYTE)&cbHash,
sizeof(DWORD),
&cbData,
0)))
{
goto Cleanup;
}
pbHash = (PBYTE)HeapAlloc (GetProcessHeap (), 0, cbHash);
if(NULL == pbHash)
{
goto Cleanup;
}
if(!NT_SUCCESS(status = BCryptCreateHash(
hAlg,
&hHash,
pbHashObject,
cbHashObject,
NULL,
0,
0)))
{
goto Cleanup;
}
PCWSTR pwTst = (PCWSTR)csText_i;
if(!NT_SUCCESS(status = BCryptHashData(
hHash,
(PBYTE)pwTst,
sizeof(rgbMsg),
0)))
{
goto Cleanup;
}
if(!NT_SUCCESS(status = BCryptFinishHash(
hHash,
pbHash,
cbHash,
0)))
{
goto Cleanup;
}
PCWSTR pTst = (PCWSTR)pbHash;
csEnryptedText_o = pTst;
Is it because of the way i cast??