【发布时间】:2023-01-31 17:54:36
【问题描述】:
我一直在尝试通过 c++ CryptUnprotectData 函数解密一些加密数据(AES 密钥加密 chrome cookie),但我似乎无法让它工作。目前该函数将失败并返回错误代码 13(意思是“参数不正确。”)。到目前为止,这是我的代码:
#include <iostream>
#include <Windows.h>
#include <wincrypt.h>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
std::string GetLastErrorAsString()
{
DWORD errorMessageID = ::GetLastError();
if(errorMessageID == 0) {
return std::string();
}
LPSTR messageBuffer = nullptr;
size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL);
std::string message(messageBuffer, size);
LocalFree(messageBuffer);
return message;
}
int main()
{
string data = "(data I want to decode)";
cout << data;
DATA_BLOB DataBytes;
DataBytes.pbData = (BYTE*)data.data();
DataBytes.cbData = (DWORD)data.size()+1;
DATA_BLOB output;
output.pbData = NULL;
output.cbData = (DWORD)data.size();
CryptUnprotectData(&DataBytes, NULL, NULL, NULL, NULL, 0, &output);
cout << GetLastErrorAsString() << endl;
cout << output.pbData;
LocalFree(output.pbData);
return 0;
}
如果有人可以提供任何帮助,将不胜感激。
我尝试了存储参数的数据类型的不同变体,但它仍然返回此错误。
【问题讨论】:
-
错误 13 ==
ERROR_INVALID_DATA,根据文档,这意味着完整性检查失败。您确定 chrome 正在使用 CryptProtectData 吗?基本谷歌搜索表明他们正在使用 AES 加密。 -
抱歉,我可能没有详细说明,我的意思是我正在尝试解密用于解密这些 cookie 的 AES 密钥。