哪个最好使用openssl或windows capi进行ecnryption问题,两者的pro和con列表是什么。 如果可以在openssl上编写我的加密程序并使用windows capi解密它没有问题或者存在一些问题。
答案 0 :(得分:9)
出于加密目的,我发现首先考虑密钥管理更容易。存储密钥的方式,密钥的创建方式,使用方式以及如何安全销毁密钥。根据我的经验,密钥管理限制了大多数应用程序结构。
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 ++友好的。