Windows C API: wincrypt 和 sspi 有什么区别?

Windows C API: what's the difference between wincrypt and sspi?

我正在寻找 windows 密码学的不同解决方案,偶然发现了这两个库。它们的头文件是 Wincrypt.hSspi.h。它们似乎都提供加密和解密例程:CryptEncryptMessageEncryptMessage,它们都提供加密上下文句柄并且非常相似。那我用它们做什么?

P.S。还有 CNG,但据我了解,它只是 wincrypt 的继任者,很快就会被弃用。

根据 MSDNEncryptMessage 函数加密消息以提供隐私。 EncryptMessage 允许应用程序在所选机制支持的加密算法中进行选择。

此函数仅作为 SASL 机制可用。

例如,如果您想在 Windows 域环境中使用 Microsoft 的安全支持提供程序接口 (SSPI) 在两个实体之间发送加密和签名的消息(在 C++ 中)。那么您可以使用 EncryptMessage.

但是CryptEncryptMessage是CAPI2 PKI加密API.

Very generically, in absence of context, the EncryptMessage is meant to encrypt data for some entity for which you have a cert (only uses crypto) and works offline, the CryptEncryptMessage can only be used between a client and a server after they have established a security context using InitializeSecurityContext/AcceptSecurityContext.

如果想了解更多,请参考:Difference between CryptEncryptMessage EncryptMessage(Negotiate)