对于加密问题,使用 openssl 或 windows capi 哪个更好。两者的优缺点列表是什么。如果可以在openssl上编写我的加密程序并用windows capi解密它没有问题或者有一些问题。
1 回答
出于加密目的,我发现首先考虑密钥管理更容易。密钥的存储位置、创建方式、使用者以及如何安全销毁。根据我的经验,密钥管理是限制应用程序结构的最大因素。
CryptoAPI 提供了一个 API 来访问存储在任意位置的密钥,通过在操作系统中注册的驱动程序(“CSP”)。OpenSSL 可以在OpenSC的帮助下提供类似的东西,但是驱动程序应该支持 PKCS#11 API。无论哪种方式,驱动程序都是由构建存储设备的人提供的某种 DLL(假设密钥存储并在硬件设备中使用)。
如果您希望能够使用存储在硬件设备中的密钥(设备可能是智能卡、HSM,......任何可以进行加密但拒绝提供密钥本身的东西),那么您将不得不通过CryptoAPI 或 PKCS#11。CryptoAPI 本质上是仅限 Windows 的,因此如果您希望您的代码可能在非 Windows 系统(MacOS、Linux、Solaris...)上运行,那么 PKCS#11 是您的最佳选择。如果您采用 PKCS#11 方式,您可能想尝试NSS而不是 OpenSSL。NSS 是用于 Netscape 衍生浏览器(例如 Firefox)的库。它是开源的。
另一方面,如果您只针对 Windows 系统,那么 CryptoAPI 可以简化分发,因为它已经存在,不需要额外的 DLL。
如果您准备放弃硬件,并且想要使用纯软件加密,并且密钥保存在 RAM 中,那么您可能不想使用 CryptoAPI,它在实现的算法数量和它接受的变体方面相当不足(例如,CryptoAPI 坚持 RSA 公共指数小于 32 位——这是正常情况,但限制仍然是任意的并且可能令人讨厌)。那里有许多加密库。除了 OpenSSL 和 NSS 之外,您可能还想研究Crypto++,它非常成熟并且据说对 C++ 友好。