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

Posted

技术标签:

【中文标题】我需要在 Qt 中使用 CryptoPP DLL 吗?【英文标题】:Do I need to use CryptoPP DLL with Qt? 【发布时间】:2015-12-09 02:50:31 【问题描述】:

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

但这真的是真的吗?我不能将 cryptlib 作为 /MD 和 /MDd 编译成 cryptlib.lib,而不是 cryptopp.dll,然后在我的项目中使用它吗?为什么我需要包含外部 DLL?

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

谢谢

【问题讨论】:

【参考方案1】:

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

没有。但是 QT 和 MFC 等库使用动态 C++ 运行时,因此您需要切换到 Crypto++ 的动态运行时。


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

是的。改成动态C++运行库,然后链接到静态库就行了。


我正在努力将 CryptoPP 编译为 DLL

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


为什么除了fips签名(已经编译)之外,还有人会使用dll

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

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

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

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

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

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

【讨论】:

为什么除了fips签名(已经编译)以外的人会使用dll @TomášNavara - 使用 FIPS DLL 时有很大的限制。有关详细信息,请参阅链接页面。此外,它没有签名,因此完整性很脆弱,并且取决于将其安装到只读目录中,这在非企业环境中并不存在(所有用户都是管理员)。固定密钥下有一个 HMAC,但任何人都可以计算它并使其看起来有效。

以上是关于我需要在 Qt 中使用 CryptoPP DLL 吗?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Python 需要在 DLL 中使用 GetMessage 进行消息泵送而不是 Qt?

如何在 Qt 应用程序中使用 MFC dll

Qt5 将 qrc 移至 DLL

用 VS 编译器在 Qt 中编译 dll 以在 Borland 中使用

在 Qt 中从 dll 创建 WinForm

如何在使用 CryptoPP 解密流后执行 unpadding