首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用cryptoAPI加密AES CBC

如何利用cryptoAPI加密AES CBC
EN

Stack Overflow用户
提问于 2015-04-14 20:25:07
回答 1查看 3.2K关注 0票数 0

我想用AES CBC mode加密来加密一个文件,使用cryptoAPI函数,并从命令行设置自己的密钥(这是对代码的更改)。

我设想(更改后)键将是1a1dc91c907325c6,并以以下形式尝试:

代码语言:javascript
复制
HCRYPTPROV hProv  = NULL;
HCRYPTKEY hKey    = NULL;
DWORD dwBlobLen;
PBYTE pbKeyBlob = NULL;
pbKeyBlob = (PBYTE)"1a1dc91c907325c6";

if(!CryptAcquireContext(&hProv, NULL,NULL, PROV_RSA_AES,CRYPT_VERIFYCONTEXT))
{
    printf(" Error in AcquireContext 0x%08x \n",GetLastError());
}    
if (!CryptImportKey(hProv,pbKeyBlob,sizeof(pbKeyBlob),0,CRYPT_EXPORTABLE,&hKey ))
{
    printf("Error 0x%08x in importing the Des key \n",GetLastError());
}

但是CryptImportKey失败了

我不知道如何使用cryptoAPI函数和它的参数

我测试了一些其他代码,并更改了参数或函数的调用命令约2周,但我无法做到这一点

请帮我一个大忙:)

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-14 20:40:24

你应该这样做:

代码语言:javascript
复制
if( ::CryptAcquireContext( &m_hCryptoProvider, NULL, NULL/*Default*/, PROV_RSA_AES, CRYPT_VERIFYCONTEXT ) )
{
    //Hash Password
    // CALG_SHA1 OK
    // CALG_AES_128 / CALG_AES_256 => error
    if( ::CryptCreateHash( m_hCryptoProvider, CALG_SHA1, 0, 0, &m_hHashPassword ) )
    {
        // Hash for the password. 
        if( ::CryptHashData( m_hHashPassword, (BYTE *)password, (DWORD) _tcslen(password) * sizeof(TCHAR), 0 ) )
        {
            // Session key from the hash
            if( ::CryptDeriveKey( m_hCryptoProvider, CALG_AES_256, m_hHashPassword, CRYPT_CREATE_SALT, &m_hCryptKey ) )
            {
                TRACE( TEXT("Crypto-API OK\n") ); 
                return ERROR_SUCCESS;
            }
            else
            {
                TRACE( TEXT("Error in CryptDeriveKey\n") ); 
            }
        }
        else
        {
            TRACE( TEXT("Error in CryptHashData\n") ); 
        }
    }
    else
    { 
        TRACE( TEXT("Error in CryptCreateHash\n") );
    }
}
else
{
    TRACE( TEXT("Error in CryptAcquireContext\n") );
}

之后,您需要使用CryptEncrypt/CryptDecrypt来对数据进行编码/解码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29636767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档