我需要在 Qt 中使用 CryptoPP DLL 吗?

Do I need to use CryptoPP DLL with Qt?

所以在official Crypto++ Visual Studio Wiki page and in this tutorial上提到,使用Qt时必须使用CryptoPP作为DLL。

但这真的是真的吗?我不能将 cryptlib 作为 /MD 和 /MDd 编译成 cryptlib.lib 而不是 cryptopp.dll 并将其用于我的项目吗?为什么我需要包含外部 DLL?

我正在努力将 CryptoPP 编译为 DLL,所以我想知道我是否只是在浪费我的时间并且有一种方法可以直接使用 cryptlib.lib(使用正确的运行时 /MD 或 / MDd)

谢谢

Do I need to use CryptoPP DLL with Qt?

没有。但是像 QT 和 MFC 这样的库使用动态 C++ rumtimes,所以你需要切换到 Crypto++ 的动态运行时。


But is this really true? Can't I just compile cryptlib as /MD and /MDd into cryptlib.lib, instead of cryptopp.dll and use that with my project? Why would I need to include external DLL?

是的。直接改成动态C++运行时库,然后link改成静态库即可。


I am struggling with compiling CryptoPP as DLL

是的,这很痛苦。人们应该避免使用它,除非他们必须使用它。


Why would anyone use dll other than the fips signed (which is already compiled)

在美国联邦和美国国防部开展业务的人员必须使用 FIPS 版本。他们别无选择。 OMB 不允许机构使用经过验证的密码以外的任何东西。

DLL 具有特殊用途。 如果您需要 FIPS DLL,那么您只能在 Windows 2000 SP1、Windows XP SP3 和 Windows Server 2003 SP1 上使用它。

DLL 只有 有批准的算法。它缺少一堆东西,比如实用程序(即 HexEncoder)和未经批准的算法(即 MD5WhirlpoolCamellia 等)。

如果你想补充DLL,那么你必须从静态库中添加缺少的算法。可以想象,这将是一个痛点。

完整性保证签名由 SHA-1/HMAC 使用静态密钥 {0x47, 0x1E, 0x33, 0x96, 0x65, 0xB1, 0x6A, 0xED, 0x0B, 0xF8, 0x6B, 0xFD, 0x01, 0x65, 0x05, 0xCC} 提供。任何人都可以篡改它,并在其上创建有效签名。

我们创建了一个关于该主题的页面。您可以在 FIPS DLL 的 Crypto++ wiki 上找到它。它提供了诸如实现细节之类的内容,并讨论了诸如操作环境之类的内容。