我想使用AES CBC mode
加密加密文件,使用cryptoAPI
函数并从命令行设置我自己的密钥(我在代码中的更改)
我认为密钥(更改后)将为1a1dc91c907325c6
并以此形式尝试:
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 functions及其参数
我测试了一些其他代码并更改了参数或功能的通话顺序约2周,但我无法做到这一点
请帮助我[大帮助:)]
谢谢
答案 0 :(得分:2)
你应该这样做:
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
来对数据进行编码/解码。