使用Crypto ++的AES实现

时间:2018-07-11 13:16:31

标签: c++ visual-studio-2010 encryption aes crypto++

我想在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

有人可以让我知道此错误的解决方法吗?

谢谢

2 个答案:

答案 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密钥加密数据。