[英]What is wrong with my SHA256 hash function?
我在生成某些文本的SHA-256哈希的Windows應用程序中編寫此函數。 該代碼可以編譯並正常運行,但似乎會產生錯誤的輸出。
char GSalt[17] = { 0 };
HRESULT SaltHashAndStorePassword(_In_ char* PlainTextPassword)
{
HCRYPTPROV CryptProvider = NULL;
HCRYPTHASH HashPointer = NULL;
char PlainTextPasswordWithSalt[64] = { 0 };
strcat_s(PlainTextPasswordWithSalt, PlainTextPassword);
strcat_s(PlainTextPasswordWithSalt, GSalt);
if (CryptAcquireContext(&CryptProvider, NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT) == FALSE)
{
return(E_FAIL);
}
if (CryptCreateHash(CryptProvider, CALG_SHA_256, 0, 0, &HashPointer) == FALSE)
{
CryptReleaseContext(CryptProvider, 0);
return(E_FAIL);
}
if (CryptHashData(HashPointer, (BYTE*)PlainTextPasswordWithSalt, (DWORD)strlen(PlainTextPasswordWithSalt), 0) == FALSE)
{
CryptDestroyHash(HashPointer);
CryptReleaseContext(CryptProvider, 0);
return(E_FAIL);
}
BYTE HashBytes[32] = { 0 };
DWORD HashSize = 32;
if (CryptGetHashParam(HashPointer, HP_HASHVAL, HashBytes, &HashSize, 0) == FALSE)
{
CryptDestroyHash(HashPointer);
CryptReleaseContext(CryptProvider, 0);
return(E_FAIL);
}
char *Hex = "0123456789abcdef";
char HashString[65] = { 0 };
for (int Count = 0; Count < 32; Count++)
{
HashString[Count * 2] = Hex[HashBytes[Count] >> 4];
HashString[(Count * 2) + 1] = Hex[HashBytes[Count] & 0xF];
}
CryptDestroyHash(HashPointer);
CryptReleaseContext(CryptProvider, 0);
return(S_OK);
}
這是Visual Studio調試會話的屏幕截圖,顯示了運行此函數時的當前變量值。
如您所見,我正在嘗試生成文本的SHA-256哈希
food@Jt/+iI?{?n\\\\}L(
但是結果散列顯示為
7804d488ccc172d87314474fb7f9951ec554cac33232bf2efc081afd323ca563
根據我測試過的其他SHA256計算器,這是不正確的。
我究竟做錯了什么?
我剛剛檢查了一下,Visual Studio 2013調試器在字符串中將單反斜杠顯示為雙反斜杠。 (Visual Studio 2010沒有。)
所以你實際上是散列的字符串是
food@Jt/+iI?{?n\}L(
您得到的結果是正確的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.