gpt4 book ai didi

c++ - 指定的 CryptoAPI 算法无效

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:16 25 4
gpt4 key购买 nike

我正在尝试使用 128 位 AES 解密来解密某些内容。当我尝试调用 CryptDecrypt 时,我收到一条错误消息,指出“指定的算法无效”。使用此处发布的库时遇到同样的问题:http://www.codeproject.com/KB/security/WinAES.aspx

什么会导致这个错误?

我在 vista64bit 上使用 CryptoAPI 和 visual studio 2008。我检查了注册表,那里有 AES 库...

编辑

BYTE*& encryptedData /*  get data length */
HCRYPTPROV cryptoHandle = NULL;
HCRYPTKEY aesKeyHandle = NULL;

hr = InitWinCrypt(cryptoHandle);
if(FAILED(hr))
{
return hr;
}

AesKeyOffering aesKey = { {PLAINTEXTKEYBLOB, CUR_BLOB_VERSION, 0, CALG_AES_128}, 16, { 0xFF, 0x00, 0xFF, 0x1C, 0x1D, 0x1E, 0x03, 0x04, 0x05, 0x0F, 0x20, 0x21, 0xAD, 0xAF, 0xA4, 0x04 }};

if(CryptImportKey(cryptoHandle, (CONST BYTE*)&aesKey, sizeof(AesKeyOffering), NULL, 0, &aesKeyHandle) == FALSE)
{
// DO error

return HRESULT_FROM_WIN32(GetLastError());
}

if(CryptSetKeyParam(aesKeyHandle, KP_IV, { 0xFF, 0x00, 0xFF, 0x1C, 0x1D, 0x1E, 0x03, 0x04, 0x05, 0x0F, 0x20, 0x21, 0xAD, 0xAF, 0xA4, 0x04 } , 0) == FALSE)
{
return HRESULT_FROM_WIN32(GetLastError());
}

BYTE blah2 = CRYPT_MODE_CBC;
// set block mode
if(CryptSetKeyParam(aesKeyHandle, KP_MODE, &blah2, 0) == FALSE)
{
//

return HRESULT_FROM_WIN32(GetLastError());
}

DWORD lol = dataLength / 16 + 1;
DWORD lol2 = lol * 16;
if(CryptDecrypt(aesKeyHandle, 0, TRUE, 0, encryptedData, &lol2) == FALSE)
{
return HRESULT_FROM_WIN32(GetLastError());
}

InitWinCrypt 函数

    if(!CryptAcquireContextW(&cryptoHandle, NULL, L"Microsoft Enhanced RSA and AES Cryptographic Provider", PROV_RSA_AES, CRYPT_VERIFYCONTEXT))
{
if(!CryptAcquireContextW(&cryptoHandle, NULL, L"Microsoft Enhanced RSA and AES Cryptographic Provider", PROV_RSA_AES, 0))
{
return HRESULT_FROM_WIN32(GetLastError());
}
else
{
return S_OK;
}
}
return S_OK;

AesOffering 结构:

struct AesKeyOffering
{
BLOBHEADER m_Header;
DWORD m_KeyLength;
BYTE Key[16];
};

编辑2

在重新启动我的计算机并删除 CBC block 之后。我现在收到错误数据错误。数据在 C# 中解密良好。但我需要使用 wincrypt 来做到这一点。

最佳答案

你路过吗 cryptoHandle引用InitWithCrypt ?如果没有,你的代码

if(!CryptAcquireContextW(&cryptoHandle, ...

只会修改InitWinCrypt cryptoHandle 的拷贝.


编辑: 如果确实如此,请尝试摆脱 CryptSetKeyParam调用设置 CRYPT_MODE_CBC

关于c++ - 指定的 CryptoAPI 算法无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1529208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com