【问题标题】:How to store and retrieve encryption key using blob with cryptoApi如何使用带有cryptoApi的blob存储和检索加密密钥
【发布时间】:2019-06-21 11:52:23
【问题描述】:

我在我的加密应用程序中使用 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 具有不同的值。在这种情况下是否重要?我在这项加密工作上工作的时间更长。任何帮助表示赞赏。

【问题讨论】:

    标签: encryption visual-c++ blob cryptoapi visual-c++-6


    【解决方案1】:

    您在导出密钥时使用交换密钥,因此您会得到一个使用 hXchgKey 加密的 blob。在导入期间,您还需要指定 交换密钥 来解密 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,这个参数可以是句柄 密钥交换密钥。

    【讨论】:

    • 我将 m_hkey 设为 0。我认为我们需要使用相同的 m_hCryptProv 并交换密钥来进行加密和解密。我对吗?我得到了不同的 m_hCryptProv 值。
    • 是的,您需要使用相同的 CSP 并为 enc/dec 交换密钥。 m_hCryptProv 具有不同的值,因为这是一个指针。
    猜你喜欢
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    相关资源
    最近更新 更多