簡體   English   中英

SHA256哈希函數有什么問題?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM