我想在Visual Studio(C ++)中实现AES加密/解密。我经历了Compiling and Integrating Crypto++ into the Microsoft Visual C++ Environment + Running Sample program。
我已经按照那里提到的所有步骤尝试尝试构建应用程序,但是在编译时遇到了链接器错误,下面的链接是我在应用程序中遇到的错误的参考。
https://www.dropbox.com/sh/32ajyx0vc6391q0/AACRYndRpbKynntADFgZUdXYa?dl=0
有人可以让我知道此错误的解决方法吗?
谢谢
答案 0 :(得分:1)
我通过更改CryptoPP版本解决了此链接错误。
以前,我在Visual Studio 2010中使用的是CryptoPP版本(7.0.0),现在我尝试使用的是CryptoPP版本(5.6.2)。
现在,我可以进行编译了,没有任何错误。
感谢您的建议。
答案 1 :(得分:0)
我建议您删除cryptopp并改用Windows内置加密。这样,MS即可支持代码的主要部分(即算法),并将其作为Windows更新的一部分进行更新。
作为一个好的副作用,它将更快地生成,二进制文件将更小,并且所需的库Advapi32.lib是Windows SDK的一部分,即,您不太可能出现链接器问题。
See this answer举例说明如何从密码导出AES密钥。但是那里的代码并不理想,相反,我通常会像这样创建简单的RAII包装器:
class Context
{
HCRYPTPROV hProv = 0;
public:
Context() : hProv( 0 ) {}
~Context()
{
if( 0 != hProv )
CryptReleaseContext( hProv, 0 );
}
operator HCRYPTPROV () const
{
return hProv;
}
HRESULT open()
{
if( !CryptAcquireContext( &hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT ) )
return GetLastHr();
return S_OK;
}
};
并对我需要的其他HCRYPT *手柄执行相同的操作。
然后参见MSDN example code,了解如何使用该AES密钥加密数据。