Windows平台下的应用程序可以分为托管的.NET程序和本机的Win32(以及Win64)两大类。.NET有着类似于JAVA的虚拟机和二进制码托管运行环境,提供了在不同Windows平台上的代码可携性。由于.NET环境为应用软件开发提供了更便捷的平台和服务,目前多数面向业务的应用软件是.NET托管程序。windows系统为应用层提供的原生API是Win32 API,Win32应用程序能够调用系统的所有功能和服务,本机二进制代码的执行速度也数倍快于JAVA.NET等虚拟机托管代码,系统工具软件和速度敏感的代码一般会是Win32应用程序。
Windows应用程序对加密API的调用关系如下图所示:
.NET Framework类库的System.Security.Cryptography、System.Security.Cryptography.PKCS、System.Security.Cryptography.X509名字空间包含有实现了各种加密功能的类。适用于Win32应用程序的加密编程接口是CryptoAPI和CNG。.NET 加密类的一部分仅是win32加密API的托管包装,另一些则是纯的托管实现。.NET 加密相关的类也适用于Windows Phone APP的开发。
即使是使用.NET类库加密,应用开发者仍然需要了解一些Win32层面的加密技术原理。因为Win32加密API不仅仅是系统的原生API,它还呈现了系统的加密体系和密钥保护管理机制。
openssl是一种与操作系统平台无关的加密库及接口,其支持平台包括了Windows,故Win32应用程序也能使用openssl编程接口加密。这种情况下,软件一般会携带openssl的dll文件。