Как сохранить и получить ключ шифрования, используя BLOB-объект с cryptoApi - PullRequest
0 голосов
/ 28 января 2019

Я использую 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 Ответ

0 голосов
/ 30 января 2019

Вы используете обменный ключ при экспорте ключа, поэтому вы получаете большой двоичный объект, зашифрованный с помощью 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, этот параметр может быть дескриптором ключа обмена ключами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...