Как сохранить и получить ключ шифрования, используя BLOB-объект с cryptoApi
Я использую blob в своем приложении шифрования для хранения ключа шифрования.
Я новичок в MFC. я использую CryptExportKey()
экспортировать ключ в BLOB-объект. Я поместил ниже код в моем Encrypt()
функция. Смотрите код в Encrypt()
функция ниже,
if (CryptGetUserKey(
m_hCryptProv,
AT_KEYEXCHANGE,
&hXchgKey))
{
printf("The key exchange key has been acquired. \n");
}
else
{
printf("Error during CryptGetUserKey exchange key.");
}
if (CryptExportKey(
m_hKey,
hXchgKey,
SIMPLEBLOB,
0,
NULL,
&dwBlobLen))
{
_tprintf(
TEXT("The key BLOB is %d bytes long. \n"),
dwBlobLen);
}
if (pbKeyBlob = (BYTE*)malloc(dwBlobLen))
{
printf("Memory has been allocated for the BLOB. \n");
}
if (CryptExportKey(
m_hKey,
hXchgKey,
SIMPLEBLOB,
0,
pbKeyBlob,
&dwBlobLen))
{
printf("Contents have been written to the BLOB. \n");
}
Также я поместил следующий код в Decrypt()
функция для импорта ключа.
if (!CryptImportKey(
m_hCryptProv,
pbKeyBlob,
dwBlobLen,
0,
0,
&m_hKey))
{
//success
}
Экспорт успешно завершен, но импорт не выполнен.
Мой файл будет закрыт после шифрования. При загрузке приложения расшифровка также завершается ошибкой, поскольку ключ не был успешно импортирован. Во время шифрования и дешифрования m_hCryptProv
имеют разные значения. Это важно в этом случае? Я так долго работаю над этой работой по шифрованию. Любая помощь приветствуется.
1 ответ
Вы используете обменный ключ при экспорте ключа, поэтому вы получаете блоб, зашифрованный с помощью ключа hXchgKey. Во время импорта вам также необходимо указать ключ обмена для расшифровки BLOB-объекта:
if (!CryptImportKey(
m_hCryptProv,
pbKeyBlob,
dwBlobLen,
hXchgKey,
0,
&m_hKey))
{
//success
}
Из MSDN:
BOOL CryptImportKey( HCRYPTPROV hProv, const BYTE *pbData, DWORD dwDataLen, HCRYPTKEY hPubKey, DWORD dwFlags, HCRYPTKEY *phKey );
hPubKey:
Если BLOB-ключ шифруется парой ключей обмена ключами, например SIMPLEBLOB, этот параметр может быть дескриптором ключа обмена ключами.